基于如何使用 pgfplots 绘制来自多个过滤器的数据我得到了一个后续问题。我想不仅过滤每个图的一个 P 值,还过滤小于给定值的 X 值。下面是我尝试实现的方法。
\pgfplotsset{
discard if not and smaller/.style 4 args={
x filter/.code={
\edef\tempa{\thisrow{#1}}
\edef\tempb{#2}
\edef\tempc{\thisrow{#3}}
\edef\tempd{#4}
\ifnum\tempa=\tempb
\ifnum\tempc<\tempd
\def\pgfmathresult{inf}
\else
\fi
\else
\def\pgfmathresult{inf}
\fi
}
}
}
\begin{tikzpicture}
\begin{axis}
\addplot [ultra thick, black, discard if not and smaller={P}{0}{X}{5}] table [x=X, y=Y] {data.dat};
\end{tikzpicture}
但是 pdfLaTeX 告诉我:
! Package pgfkeys Error: I do not know the key '/pgfplots/discard if not and sm
aller/.style 4 args' and I am going to ignore it. Perhaps you misspelled it.
我如何传递这 4 个参数以便 pgfplots 找到样式定义?
答案1
两个以上的参数需要/.style n args={no of args}{....}
或/.code n args={no of arguments}{....}
\pgfplotsset{
discard if not and smaller/.style n args={4}{
x filter/.code={
\edef\tempa{\thisrow{#1}}
\edef\tempb{#2}
\edef\tempc{\thisrow{#3}}
\edef\tempd{#4}
\ifnum\tempa=\tempb
\ifnum\tempc<\tempd
\def\pgfmathresult{inf}
\else
\fi
\else
\def\pgfmathresult{inf}
\fi
}
}
}
\begin{tikzpicture}
\begin{axis}
\addplot [ultra thick,
black,
discard if not and smaller={P}{0}{X}{5}] table [x=X, y=Y] {data.dat};
\end{tikzpicture}
如果在输入这些参数时有特定的模式而不是连续的括号{1}{2}{3}{4}
等,你也可以使用
/.style args={#1 and #2 using color #3 and size #4}
或其他任何内容,以便你可以提供论据
mykey=a and b using color white and size 2cm
同样如此/.code args
。