如何使用 pgfplots/tikz 绘制未知数量的表格列

如何使用 pgfplots/tikz 绘制未知数量的表格列

我有一个场景,我的数据表有一定数量的列,但我不一定知道具体有多少列,因为它们是根据某个窗口内的数据点数量生成的。我想用特定的样式绘制第一列和最后一列以区分它们,并用统一的颜色绘制中间的点。示例表可能是...

x first last A B C D (...)
(data goes here)

其中 A、B、C 等是位于first和之间的数据点last。我将始终有xfirstlast,以及至少一列,但我不一定知道可能有多少额外列。这些列的长度也都相同,因此它们始终可以用 绘制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}

相关内容