我有一个csv
文件,其中有 2 个“列”,用逗号分隔。因此该.csv
文件看起来像
0.123,0.3232
1.244,1.325
上述数字分别是 x=0 和 x=1 处的“y 值”,即第一行是 x=0 处两个不同函数的 y 值,第二行是 x=1 处相同函数的 y 值,依此类推。实际csv
文件有 8 列,包含数千个 x 点。
我的问题是如何在同一个图中绘制上述函数(线条上使用不同的颜色)?
我的 ME 是
\documentclass[tikz]{standalone}
\usepackage{pgfplots,pgfplotstable,filecontents}
\pgfplotsset{compat = newest}
\pgfplotstableread[col sep = comma]{kDist.csv}\mydata
\begin{document}
\begin{tikzpicture}
\begin{axis}[
legend pos = south east,
xmin = 0, xmax = 1000,
ymin = 0, ymax = 200,
]
\addplot table[x index = {0}, y index = {1}]{\mydata};
\legend{Actual}
\end{axis}
\end{tikzpicture}
\end{document}
我的包含所有数据的 csv 文件在哪里kDist.csv
。ME 给出了完全错误的结果,只有一条(闭合的)线,而不是 8 条独立的线。
答案1
您可以x expr
再次使用:
\addplot table[x expr=\coordindex,y index=0]{\mydata};
\addplot table[x expr=\coordindex,y index=1]{\mydata};
代码:
\documentclass{standalone}
\usepackage{pgfplotstable,filecontents}
\pgfplotsset{compat = 1.12}
\pgfplotstableread[col sep = comma]{%
0.123,0.3232
1.244,1.325
}\mydata
\begin{document}
\begin{tikzpicture}
\begin{axis}[
legend pos = south east,
xmin = 0, xmax = 2,
ymin = 0, ymax = 2,
]
\addplot table[x expr=\coordindex,y index=0]{\mydata};
\addplot table[x expr=\coordindex,y index=1]{\mydata};
\legend{Actual,ficticious}
\end{axis}
\end{tikzpicture}
\end{document}
如果您有很多列,那么\pgfplotsinvokeforeach
可能会更好。
\documentclass{standalone}
\usepackage{pgfplotstable,filecontents}
\pgfplotsset{compat = 1.12}
\pgfplotstableread[col sep = comma]{%
0.123,0.3232, 0.36, 0.58, 0.45, 0.21, 0.56
1.244,1.325, 0.75, 0.85, 0.58, 0.78, 0.98
}\mydata
\begin{document}
\begin{tikzpicture}
\begin{axis}[
legend pos = south east,
xmin = 0, xmax = 2,
ymin = 0, ymax = 2,
]
\pgfplotsinvokeforeach{0,...,6}{
\addplot table[x expr=\coordindex,y index=#1]{\mydata};}
\legend{Actual,ficticious}
\end{axis}
\end{tikzpicture}
\end{document}
答案2
您的 MWe 工作正常...您只是将最大值设置得太大,以至于您的图表几乎在一点上崩溃 :-)。尝试:
\documentclass[tikz]{standalone}
\usepackage{pgfplots,pgfplotstable,filecontents}
\pgfplotsset{compat = newest}
\pgfplotstableread[col sep = comma]{%
0.123,0.3232
1.244,1.325
}\mydata
\begin{document}
\begin{tikzpicture}
\begin{axis}[
legend pos = south east,
xmin = 0, xmax = 2,
ymin = 0, ymax = 2,
]
\addplot table[x index = 0, y index = 1]{\mydata};
\legend{Actual}
\end{axis}
\end{tikzpicture}
\end{document}