我正在尝试自动分离 pgfplots 中的图形。我的意思是这样的:如果我有这样的文件作为输入:
x z y
1 4 1
2 5 1
3 0 2
4 10 2
现在我想1
在一个图和2
另一个图中同时显示带有 的条目。因为我想自动执行此操作,所以我不想使用多个手动\addplot
s 来执行此操作。
我想到现在的解决方案是这样的:
\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 脚本)要容易得多,并且将该字符串写入文件并不那么困难。
附言:是的,这不是一个好的解决方案,但它目前有效,更优雅的解决方案总是受欢迎的;)