我有一个场景,我的数据表有一定数量的列,但我不一定知道具体有多少列,因为它们是根据某个窗口内的数据点数量生成的。我想用特定的样式绘制第一列和最后一列以区分它们,并用统一的颜色绘制中间的点。示例表可能是...
x first last A B C D (...)
(data goes here)
其中 A、B、C 等是位于first
和之间的数据点last
。我将始终有x
、first
和last
,以及至少一列,但我不一定知道可能有多少额外列。这些列的长度也都相同,因此它们始终可以用 绘制x
。实际上,这些列实际上没有列名,但我可以在需要时添加它们。此数据存储在一个文件中,我将其称为my_data.dat
。
first
因为我知道它们的列名,所以添加和的图表很容易last
。我遇到的困难是以不需要知道列数的方式绘制这些中间列。
在 Python 语法中,我希望执行类似这样的操作plt.plot(x, my_data[2:-1])
。是否有命令可以返回数据表中的列数,以便我可以对每列执行 for 循环?或者有一种方法可以告诉 pgfplots\addplot
使用一系列列索引来绘制一个图?
这可以在 pgfplots 中完成吗?或者我唯一的选择是手动计算列数,然后像我在这个帖子? 这当然是可行的,但如果我可以将其推广,那么我就不必总是手动计算列数,那就太好了。
答案1
您可以使用 获取表中的列数\pgfplotstablegetcolsof
,因此我想您可以执行以下操作:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotstableread{
x first last A B C D
0 1 2 3 4 5 6
1 1 2 3 4 5 6
}\mydata
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot table[x=x, y=first] {\mydata};
\addplot table[x=x, y=last] {\mydata};
% get number of columns in table
\pgfplotstablegetcolsof{\mydata}
% subtract one because column indexing is zero based
\pgfmathtruncatemacro\NumCols{\pgfplotsretval-1}
% iterate over columns from the fourth (with index 3 because starts at zero)
\pgfplotsinvokeforeach{3,...,\NumCols}{
\addplot [black] table[x=x, y index=#1] {\mydata};
}
\end{axis}
\end{tikzpicture}
\end{document}