我正在尝试使用 pfgplots 绘制垂直条形图,该图以字符串作为条形图的标签。(这个问题以前有人问过,但我希望现在有一种更简洁的方法来做这件事。也许是一个不同的包?)上一个问题:pgfplots 使用数据表中的字符串作为条形图中的 x 轴标签
我的尝试如下(MWE):
\documentclass[11pt]{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xlabel=x axis label,ylabel=y axis label]
\addplot [ybar] table [symbolic x coords=Month, y=Dozers, col sep=comma] {cnrldata.csv};
\end{axis}
\end{tikzpicture} \\
\end{document}
从此我当然得到了错误:
Package PGF Math Error: Could not parse input 'January' as a floating point number, sorry. The unreadable part was near 'January'.. ... y=Dozers, col sep=comma] {data.csv};
表中的数据如下所示:
Month, Dozers,
January, 0.85,
February, 0.7,
希望现在有更好的解决方案,但如果没有,我将删除这个问题,因为它是重复的。
答案1
似乎您可以使用 xtick 标签和 来实现这一点。首先,您需要使用 将数据读入下面\xcoordindex
称为的“数组” 。之后,您只需告诉 pgf 访问 中的数据。这样您就可以生成\datatable
\pgfplotstableread
\datatable
使用代码:
\documentclass[11pt]{article}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.9}
\usepackage{filecontents}% write data file to make make MWE self contained
\begin{filecontents}{dozers.csv}
Month, Dozers,
Jan, 0.85,
Feb, 0.7,
Mar, 0.6,
Apr, 0.75,
May, 0.8,
June, 0.9,
\end{filecontents}
\begin{document}
\pgfplotstableread[col sep=comma,]{dozers.csv}\datatable
\begin{tikzpicture}
\begin{axis}[
ybar,
xlabel={Month},
xtick=data,
xticklabels from table={\datatable}{Month},
ylabel={Dozers}]
\addplot table [x expr=\coordindex, y={Dozers}]{\datatable};
\end{axis}
\end{tikzpicture} \\
\end{document}
编辑
按照解决方案在 PGFplot 中使用文件中的标签看来您不必先使用以下命令读取文件\pgfplotstableread
:
\documentclass[11pt]{article}
\usepackage{pgfplots}
%\usepackage{pgfplotstable}
\pgfplotsset{compat=1.9}
\usepackage{filecontents}
\begin{filecontents}{dozers.csv}
Month Dozers
Jan 0.85
Feb 0.7
Mar 0.6
Apr 0.75
May 0.8
June 0.9
\end{filecontents}
\begin{document}
%\pgfplotstableread[col sep=comma,]{dozers.csv}\datatable
\begin{tikzpicture}
\begin{axis}[
ybar, ymin=0, ylabel=Dozers,
xlabel=Month,
xtick=data,
xticklabels from table={dozers.csv}{Month},
]
\addplot table [x expr=\coordindex, y=Dozers]{dozers.csv};
\end{axis}
\end{tikzpicture} \\
\end{document}
为了使它工作,我必须从数据文件中删除逗号。输出基本上与上面的相同,只是我添加了ymin-0
。