PGFplots 和 boxplots:如何调整箱子的宽度和分离?

PGFplots 和 boxplots:如何调整箱子的宽度和分离?

我想使用pgfplots 绘制箱线图. 这个最小的例子对我来说很好用。

但我想以这种形式显示更多数据

\begin{filecontents}{testdata.dat}
 0 1 1.2 0.4 1.5 0.2
 1 2 2.3 1.5 2.7 1
 2 0.7 1.4 0.5 1.9 0.1
 3 1 1.2 0.4 1.5 0.2
 4 2 2.3 1.5 2.7 1
 5 0.7 1.4 0.5 1.9 0.1
\end{filecontents}

当我运行上面提到的这个最小示例时,我得到了接触或重叠的框。不幸的是,我不能附加图像。只需自己运行下面的示例即可。

为了考虑更多数据并删除重叠图表,我需要在提供的代码中调整什么?这个宽度可以手动调整吗?或者甚至可以选择自动执行此操作?

\documentclass{minimal}
\usepackage{pgfplots}
\usepackage{filecontents}

\begin{filecontents}{testdata.dat}
 0 1 1.2 0.4 1.5 0.2
 1 2 2.3 1.5 2.7 1
 2 0.7 1.4 0.5 1.9 0.1
 3 1 1.2 0.4 1.5 0.2
 4 2 2.3 1.5 2.7 1
 5 0.7 1.4 0.5 1.9 0.1
\end{filecontents}

\pgfplotsset{
 box plot/.style={
    /pgfplots/.cd,
    black,
    only marks,
    mark=-,
    mark size=1em,
    /pgfplots/error bars/.cd,
    y dir=plus,
    y explicit,
 },
 box plot box/.style={
    /pgfplots/error bars/draw error bar/.code 2 args={%
        \draw  ##1 -- ++(1em,0pt) |- ##2 -- ++(-1em,0pt) |- ##1 -- cycle;
    },
    /pgfplots/table/.cd,
    y index=2,
    y error expr={\thisrowno{3}-\thisrowno{2}},
    /pgfplots/box plot
 },
 box plot top whisker/.style={
    /pgfplots/error bars/draw error bar/.code 2 args={%
        \pgfkeysgetvalue{/pgfplots/error bars/error mark}%
        {\pgfplotserrorbarsmark}%
        \pgfkeysgetvalue{/pgfplots/error bars/error mark options}%
        {\pgfplotserrorbarsmarkopts}%
        \path ##1 -- ##2;
    },
    /pgfplots/table/.cd,
    y index=4,
    y error expr={\thisrowno{2}-\thisrowno{4}},
    /pgfplots/box plot
 },
 box plot bottom whisker/.style={
    /pgfplots/error bars/draw error bar/.code 2 args={%
        \pgfkeysgetvalue{/pgfplots/error bars/error mark}%
        {\pgfplotserrorbarsmark}%
        \pgfkeysgetvalue{/pgfplots/error bars/error mark options}%
        {\pgfplotserrorbarsmarkopts}%
        \path ##1 -- ##2;
    },
    /pgfplots/table/.cd,
    y index=5,
    y error expr={\thisrowno{3}-\thisrowno{5}},
    /pgfplots/box plot
 },
 box plot median/.style={
    /pgfplots/box plot
 }
}

\begin{document}
\begin{tikzpicture}
\begin{axis} [enlarge x limits=0.5,xtick=data]
 \addplot [box plot median] table {testdata.dat};
 \addplot [box plot box] table {testdata.dat};
 \addplot [box plot top whisker] table {testdata.dat};
 \addplot [box plot bottom whisker] table {testdata.dat};
\end{axis}
\end{tikzpicture}
\end{document}

非常感谢您的宝贵时间。

答案1

下面是一个带有新可选键的示例box plot width,可用于设置框的宽度:

\documentclass{minimal}
\usepackage{pgfplots}
\usepackage{filecontents}

\begin{filecontents}{testdata.dat}
 0 1 1.2 0.4 1.5 0.2
 1 2 2.3 1.5 2.7 1
 2 0.7 1.4 0.5 1.9 0.1
 3 1 1.2 0.4 1.5 0.2
 4 2 2.3 1.5 2.7 1
 5 0.7 1.4 0.5 1.9 0.1
\end{filecontents}

\pgfplotsset{
 box plot width/.initial=1em,
 box plot/.style={
    /pgfplots/.cd,
    black,
    only marks,
    mark=-,
    mark size=\pgfkeysvalueof{/pgfplots/box plot width},
    /pgfplots/error bars/.cd,
    y dir=plus,
    y explicit,
 },
 box plot box/.style={
    /pgfplots/error bars/draw error bar/.code 2 args={%
        \draw  ##1 -- ++(\pgfkeysvalueof{/pgfplots/box plot width},0pt) |- ##2 -- ++(-\pgfkeysvalueof{/pgfplots/box plot width},0pt) |- ##1 -- cycle;
    },
    /pgfplots/table/.cd,
    y index=2,
    y error expr={\thisrowno{3}-\thisrowno{2}},
    /pgfplots/box plot
 },
 box plot top whisker/.style={
    /pgfplots/error bars/draw error bar/.code 2 args={%
        \pgfkeysgetvalue{/pgfplots/error bars/error mark}%
        {\pgfplotserrorbarsmark}%
        \pgfkeysgetvalue{/pgfplots/error bars/error mark options}%
        {\pgfplotserrorbarsmarkopts}%
        \path ##1 -- ##2;
    },
    /pgfplots/table/.cd,
    y index=4,
    y error expr={\thisrowno{2}-\thisrowno{4}},
    /pgfplots/box plot
 },
 box plot bottom whisker/.style={
    /pgfplots/error bars/draw error bar/.code 2 args={%
        \pgfkeysgetvalue{/pgfplots/error bars/error mark}%
        {\pgfplotserrorbarsmark}%
        \pgfkeysgetvalue{/pgfplots/error bars/error mark options}%
        {\pgfplotserrorbarsmarkopts}%
        \path ##1 -- ##2;
    },
    /pgfplots/table/.cd,
    y index=5,
    y error expr={\thisrowno{3}-\thisrowno{5}},
    /pgfplots/box plot
 },
 box plot median/.style={
    /pgfplots/box plot
 }
}

\begin{document}
\begin{tikzpicture}
\begin{axis} [enlarge x limits=0.5,xtick=data, box plot width=0.5em]
 \addplot [box plot median] table {testdata.dat};
 \addplot [box plot box] table {testdata.dat};
 \addplot [box plot top whisker] table {testdata.dat};
 \addplot [box plot bottom whisker] table {testdata.dat};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容