![从 pgf 图中的数据文件设置 x 轴文本标签](https://linux22.com/image/288088/%E4%BB%8E%20pgf%20%E5%9B%BE%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E8%AE%BE%E7%BD%AE%20x%20%E8%BD%B4%E6%96%87%E6%9C%AC%E6%A0%87%E7%AD%BE.png)
以下是 MWE:
\documentclass{article}
\usepackage{pgfplots, filecontents}
\pgfplotsset{compat=1.8}
\begin{filecontents}{horizontal.dat}
Name Self PR ST PA CO TO
RS 95.8 87.8 94.6 99.2 87.4 91.9
MS 99.2 84.6 91.1 100.0 91.0 91.0
SM 83.4 65.6 72.2 62.5 77.4 71.4
\end{filecontents}
\begin{document}
\pgfplotstableread{horizontal.dat}{\horizontal}
\begin{tikzpicture}[scale=1]
\begin{axis}[
ybar,
xtick=data,
xticklables from table={\horizontal}{Name}
]
\addplot table [
x=Name,
y=TO] {\horizontal};
\addplot table [
x=Name,
y=Self] {\horizontal};
\end{axis}
\end{tikzpicture}
\end{document}
我所要做的就是绘制一个条形图,其中“名称”下显示的内容作为 X 轴,将“自身”中显示的内容作为第一条条形图的数据,将“TO”中显示的内容作为第二条条形图的数据。
因此,在 X 轴上,RS 将出现两个条形图。一个代表 95.8,另一个代表 91.9,等等。
它一直告诉我 RS 不是一个浮点数!
我该如何解决这个问题?
答案1
这是一次尝试。pgfplotstable
是必需的。此解决方案使用foreach
循环来读取数据。
注意:使用horizontal.dat
输入方式filecontents
也同样有效。
代码
\documentclass{article}
\usepackage{pgfplots,filecontents}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.8}
%\begin{filecontents}{horizontal.dat}
%Name Self PR ST PA CO TO
%RS 95.8 87.8 94.6 99.2 87.4 91.9
%MS 99.2 84.6 91.1 100.0 91.0 91.0
%SM 83.4 65.6 72.2 62.5 77.4 71.4
%\end{filecontents}
\begin{document}
%\pgfplotstableread{horizontal.dat}{\horizontal}
\pgfplotstableread[col sep=comma]{
Name,Self,PR,ST, PA,CO,TO
RS,95.8,87.8,94.6,99.2,87.4,91.9
MS,99.2,84.6,91.1,100.0, 91.0,91.0
SM,83.4,65.6,72.2,62.5,77.4,71.4
}\horizontal
\begin{tikzpicture}[scale=1]
\begin{axis}[
height=10cm,
ybar,
enlargelimits=0.3,
xtick=data,
xticklabels from table={\horizontal}{Name},
x tick label style={anchor=north,font=\small}
]
\foreach \i in {Self,PR,ST,PA,CO,TO}
{\addplot table [x expr=\coordindex, y=\i] {\horizontal}; }
\end{axis}
\end{tikzpicture}
\end{document}