pgfplots 中的多个“如果不是则丢弃”

pgfplots 中的多个“如果不是则丢弃”

语境:我想用 绘制 CSV 文件中的一些数据pgfplots。此文件包含的信息比需要的多,所以我想对其进行过滤。过滤器(discard if not来自这里或者那里) 在一列上运行良好,但当我想同时过滤几列时,我遇到了一些麻烦。

问题:在我的例子中,我想取 3 个“若否则丢弃”条件的交集。但似乎只考虑了最后一个条件。

以下是平均能量损失

\documentclass{standalone} 

\usepackage{tikz}
\usepackage{pgfplots}
    \pgfplotsset{compat=newest}
    
\usepackage{filecontents}
\begin{filecontents}{data.csv}
    # x, y, color, shape, size
    1, 3, a, 0, 2
    2, 6, b, 0, 2
    3, 5, a, 1, 2
    4, 4, b, 1, 3
    5, 9, a, 0, 3
    6, 1, b, 1, 3
\end{filecontents}


\begin{document}

\pgfplotsset{
    discard if not A/.style 2 args={
        x filter/.code={
            \edef\tempa{\thisrow{#1}}
            \edef\tempaa{#2}
            \ifx\tempa\tempaa
            \else
                \def\pgfmathresult{}
            \fi
        }
    },
    discard if not B/.style 2 args={
        x filter/.code={
            \edef\tempb{\thisrow{#1}}
            \edef\tempbb{#2}
            \ifx\tempb\tempbb
            \else
            \def\pgfmathresult{}
            \fi
        }
    },
}

\begin{tikzpicture} 
    \begin{axis}[grid]          
        \addplot+[mark=+, only marks,]
            table[x expr=\thisrow{x}*1, y expr=\thisrow{y}*1, 
                    discard if not A={color}{a},
                    discard if not A={shape}{0},
                    discard if not B={size}{2},
                    ignore chars={\#}, col sep=comma,
                ] 
            {data.csv};
    \end{axis}
\end{tikzpicture}
\end{document}

在前面的例子中,我没有只绘制 1 个点,而是得到了与之对应的 3 个点size=2

尽管我的问题似乎与此类似问题,这并不相同,因为它不同于一个“丢弃如果”和一个“丢弃如果不是”的组合与三个“丢弃如果不是”的组合。但当然,我尝试使用这个先前的问题来解决我的问题,但没有成功。

问题:如何解决这个问题,并得到这三个discard if not条件的交集pgfplots

答案1

而不是x filter/.code你想要的x filter/.append code。那么您只需要一个版本。

\documentclass{standalone} 

\usepackage{tikz}
\usepackage{pgfplots}
    \pgfplotsset{compat=newest}
    
\usepackage{filecontents}
\begin{filecontents}[overwrite]{data.csv}
    # x, y, color, shape, size
    1, 3, a, 0, 2
    2, 6, b, 0, 2
    3, 5, a, 1, 2
    4, 4, b, 1, 3
    5, 9, a, 0, 3
    6, 1, b, 1, 3
\end{filecontents}


\begin{document}

\pgfplotsset{
    discard if not A/.style 2 args={
        x filter/.append code={
            \edef\tempa{\thisrow{#1}}
            \edef\tempaa{#2}
            \ifx\tempa\tempaa
            \else
                \def\pgfmathresult{}
            \fi
        }
    }}

\begin{tikzpicture} 
    \begin{axis}[grid]          
        \addplot+[mark=+, only marks,]
            table[x expr=\thisrow{x}*1, y expr=\thisrow{y}*1, 
                    discard if not A={color}{a},
                    discard if not A={shape}{0},
                    discard if not A={size}{2},
                    ignore chars={\#}, col sep=comma,
                ] 
            {data.csv};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容