pgfplots 根据一列单独绘制图形

pgfplots 根据一列单独绘制图形

我正在尝试自动分离 pgfplots 中的图形。我的意思是这样的:如果我有这样的文件作为输入:

x z  y
1 4  1
2 5  1
3 0  2
4 10 2

现在我想1在一个图和2另一个图中同时显示带有 的条目。因为我想自动执行此操作,所以我不想使用多个手动\addplots 来执行此操作。

我想到现在的解决方案是这样的:

\foreach \var in {1,2,..,50}{
  \addplot[y filter/.expression={\thisrow{z}==\var ? y : nan}, unbounded coords=jump] ...
}

但这必须循环遍历每个可能的值,这z会花费很长时间,而且完全没有必要。有没有办法只循环遍历当前值,或者从另一个文件中获取要循环的列表(这对我来说也是一个解决方案)?

编辑:我现在通过将我想要的数字写入另一个文件来解决这个问题,在生成图形的文件中\def\iterate{<numbers>}使用它\input{...},然后遍历定义的宏的内容。(不是一个好的解决方案,但它有效)

答案1

好吧,我对此的解决方案是创建一个包含 TeX 宏声明的文件,以便我可以将该文件包含到主 latex 文件中并迭代声明的宏。

例子:

File to generate the macro
-------
\def\myMacro{13,31,51,73,92,120}
\documentclass[multi=page,border=3mm]{standalone}

\usepackage{pgfplots}
\usepackage{tikz}

\pgfplotsset{compat=newest}

% fileHeader
% pixelCount scaling time

\begin{document}
\input{scales}
\begin{page}
\begin{tikzpicture}
        \begin{axis}
                        \foreach \var in  \myMacro{
                                \addplot+[red, mark size=2pt, y filter/.expression={\thisrow{rowToFilterFor}==\var ? y : nan}] table[x=column1, y=column2, col sep=space] {inputDataFile.dat}
                        }
        \end{axis}
\end{tikzpicture}
\end{page}
\end{document}

我发现这比搜索和编辑从外部声明要迭代的列表的行(在我的情况下是 bash 脚本)要容易得多,并且将该字符串写入文件并不那么困难。

附言:是的,这不是一个好的解决方案,但它目前有效,更优雅的解决方案总是受欢迎的;)

相关内容