我有一个 csv 文件,例如:
column1,column2
string1,value1
string2,value2
…
值是整数,字符串是字母数字。
我尝试绘制它,x 轴上是字符串,y 轴上是值。经过几次尝试,出现了如下错误Could not parse input "string1" as a floating point number, sorry. The unreadable part was near…
,根据一些问题(例如这里,这里,这里,这里或者这里),我终于找到了让事情正常运作的唯一方法,(另见文档,第 363 页):
\begin{tikzpicture}
\begin{axis}[
symbolic x coords={string1,string2,string3,…},
minor tick num=1,
]
\addplot table [x=column1,y=column2] {csvfile.csv}
\end{axis}
\end{tikzpicture}
显然,非数值数据需要直接写在图形定义中。
我怎样才能以 DRY 方式获得相同的结果,即仅将数据源作为\addplot
参数给出的 CSV 文件?
答案1
感谢 torbjørn-t 的评论,我终于找到了这个答案和xticklabels from table={<table or file name>}{<column name>}
选项。
以下是最终的工作代码:
\pgfplotstableread[col sep=comma]{path/to/csv}\datatable
\begin{tikzpicture}
\begin{axis}[
ybar,
xtick=data,
xticklabels from table={\datatable}{column1},
]
\addplot table [col sep=comma, x expr=\coordindex, y=column2] {path/to/csv};
\end{axis}
\end{tikzpicture}