pgfplots:使用 .csv 中的字符串作为条形图标签

pgfplots:使用 .csv 中的字符串作为条形图标签

我正在尝试使用 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

相关内容