在 pgfplots 样式中使用 2 个以上参数

在 pgfplots 样式中使用 2 个以上参数

基于如何使用 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

相关内容