pgfplots,如何仅选择某些类别进行绘图

pgfplots,如何仅选择某些类别进行绘图

我开始使用这个神奇的软件包pgfplots,我需要一点帮助。在此示例取自手册(第 106 页)

\begin{tikzpicture} \begin{axis}[scatter/classes={
a={mark=square*,blue},%
b={mark=triangle*,red},%
c={mark=o,draw=black}}]
\addplot[scatter,only marks,
    scatter src=explicit symbolic]
    coordinates {
        (0.1,0.15)  [a]
        (0.45,0.27) [c]
        (0.02,0.17) [a]
        (0.06,0.1)  [a]
        (0.9,0.5)   [b]
        (0.5,0.3)   [c]
        (0.85,0.52) [b]
        (0.12,0.05) [a]
        (0.73,0.45) [b]
        (0.53,0.25) [c]
        (0.76,0.5)  [b]
        (0.55,0.32) [c]};
\end{axis} 
\end{tikzpicture}

创建了三个散点图类,a、b 和 c,每个类由几个点组成。每个类都有单独的标记格式选项和图例条目,这是一个很棒的功能。但我还没有找到任何方法来“关闭”某些散点图类。

是否有简单的技巧可以仅绘制“a”或“b”类?原则上,我想使用此元数据作为数据的选择或过滤器。这将非常有用。

不命名散点图类不会有帮助,所有点都还在那里,但未格式化,我无法在合理的时间内找到其他解决方案。如果无法使用这些类,是否可以用其他方式进行此类过滤?

答案1

对于此类应用程序,我会使用\addplot ... table而不是\addplot ... coordinates。这样可以更轻松地访问坐标属性,还可以更轻松地在 PGFPlots 中使用来自外部应用程序的数据。

如果您以表格形式提供数据,则可以discard if={<column name>}{<value>}使用discard if not当条形图基于符号值时,是否可以更改单个条形的颜色?用于过滤数据:

\documentclass[10pt]{amsart}

\usepackage{pgfplots}
\pgfplotsset{compat=1.11}


\begin{document}

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


\begin{tikzpicture}
\begin{axis}[
    scatter/classes={
        a={mark=square*,blue},%
        b={mark=triangle*,red},%
        c={mark=o,draw=black}
    }
]
\addplot[scatter,only marks,
    scatter src=explicit symbolic,
    discard if={class}{a}
]
    table [meta index=2]{
        x       y       class
        0.1     0.15    a
        0.45    0.27    c
        0.02    0.17    a
        0.06    0.1     a
        0.9     0.5     b
        0.5     0.3     c
        0.85    0.52    b
        0.12    0.05    a
        0.73    0.45    b
        0.53    0.25    c
        0.76    0.5     b
        0.55    0.32    c
       };
\end{axis} 
\end{tikzpicture}

\end{document}

相关内容