按键分组的多个箱线图

按键分组的多个箱线图

我在 CSV 文件中有一些数据,我想用它们来创建多个箱线图。每个样本都有一个标识符“set”,表示属于某个集合,我希望每个集合都有一个箱线图。它尝试使用通用宏discard if not,但在这种情况下似乎不起作用。

到目前为止

\documentclass[crop,tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{statistics}
\usepackage{pgfplotstable}

% discard by row label
\pgfplotsset{
    discard if not/.style 2 args={
        y filter/.code={
            \edef\tempa{\thisrow{#1}}
            \edef\tempb{#2}
            \ifx\tempa\tempb
            \else
                \def\pgfmathresult{inf}
            \fi
        }
    }
}

\begin{filecontents*}{data.csv}
v,set
0.1,a
0.2,a
0.3,a
0.8,b
0.9,b
1.0,b
\end{filecontents*}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[
        boxplot/draw direction=y,
    ]
        \addplot+[boxplot]
            table [y=v, discard if not={set}{a}, col sep=comma]{data.csv};
        \addplot+[boxplot]
            table [y=v, discard if not={set}{b}, col sep=comma]{data.csv};
    \end{axis}
\end{tikzpicture}

\end{document}

导致

在此处输入图片描述

有什么想法可以如何根据列选择样本吗?

答案1

您几乎已经完成了。但您需要使用(不幸的是,目前尚未记录的)/pgfplots/boxplot/data filter/.code密钥。我如何知道这个密钥?

less /usr/local/texlive/2019/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.statistics.code.tex

结果:

\documentclass[crop,tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{statistics}

% discard by row label
\pgfplotsset{
    discard if not/.style 2 args={
        /pgfplots/boxplot/data filter/.code={
            \edef\tempa{\thisrow{#1}}
            \edef\tempb{#2}
            \ifx\tempa\tempb
            \else
                \def\pgfmathresult{inf}
            \fi
        }
    }
}

\begin{filecontents*}{data.csv}
v,set
0.1,a
0.2,a
0.3,a
0.8,b
0.9,b
1.0,b
\end{filecontents*}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[
        boxplot/draw direction=y,
    ]
        \addplot+[boxplot]
            table [y=v, discard if not={set}{a}, col sep=comma]{data.csv};
        \addplot+[boxplot]
            table [y=v, discard if not={set}{b}, col sep=comma]{data.csv};
    \end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

我认为应该有人建议 pgfplots 的开发人员记录此密钥。如果您不想这样做,我很乐意这样做。

相关内容