假设我有一个 csv 文件,其中没有标题,只有数据。第一列是时间(x 轴),接下来的 3 列分别构成一个不同的集合;也就是说,plot(t, col1) 是一组数据,plot(t, col2) 等。
我可以使用以下命令加载 csv
\pgfplotstableread[col sep = comma]{data.csv}\mydata
那么我该如何绘制每条线?
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat = 1.10}
\pgfplotstableread[col sep = comma]{fexam1cdata.csv}\mydata
\begin{document}
\begin{tikzpicture}
\begin{axis}[
legend pos = south east,
xmin = 0,
xmax = 20,
ymin = 0,
ymax = 2.5
]
\addplot table[x = time, y = 2nd col]{\mydata};
\addplot table[x = time, y = 3rd col]{\mydata};
\addplot table[x = time, y = 4th col]{\mydata};
\addplot table[x = time, y = 5th col]{\mydata};
\legend{Actual, Measured, Est $Q = 0.01$, Est $Q = 0.1$}
\end{axis}
\end{tikzpicture}
\end{document}
pgfplots
每列都有内部标签名称吗?我可以将其更改为时间、实际、测量、Q1、Q2 吗?
在上面的代码中,我使用了x = time
和y = ith col
来显示我想要的内容。这些并不正确,而且无法编译,因为我不知道如何使用 来区分 csv 文件中的列pgfplots
。
答案1
如果您的 csv 文件中没有列名(即在标题行中),则可以使用列索引(从零开始)来引用它们。请参阅 1.10 版第 49 页pgfplots 手册
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat = 1.10}
\pgfplotstableread[col sep = comma]{fexam1cdata.csv}\mydata
\begin{document}
\begin{tikzpicture}
\begin{axis}[
legend pos = south east,
xmin = 0, xmax = 20,
ymin = 0, ymax = 2.5,
]
\addplot table[x index = {0}, y index = {1}]{\mydata};
\legend{Actual}
\end{axis}
\end{tikzpicture}
\end{document}
如果要使用常用选项绘制多个事物,则可以在选项中指定选项axis
,例如指定x index
:
...
\begin{axis}[
legend pos = south east,
xmin = 0, xmax = 20,
ymin = 0, ymax = 2.5,
table/x index={0},
]
\addplot table[y index={1}]{\mydata};
...
如果第一行有任何字母字符,您还必须header = false
在加载表格时或在轴选项中指定。这包括nan
第一行是否有。