![在 pgfplots 样式中使用 2 个以上参数](https://linux22.com/image/265531/%E5%9C%A8%20pgfplots%20%E6%A0%B7%E5%BC%8F%E4%B8%AD%E4%BD%BF%E7%94%A8%202%20%E4%B8%AA%E4%BB%A5%E4%B8%8A%E5%8F%82%E6%95%B0.png)
基于如何使用 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
。