使用符号坐标的箱线图组

使用符号坐标的箱线图组

我想创建一个类似于 条形图示例,但使用箱线图代替条形图。

到目前为止,我有这个MWE:

\documentclass{article}
\usepackage{amsmath}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{statistics}

\begin{document}

\pgfplotstableread{
%\begin{filecontents}{test.dat}
error
1
2
3
5
5
5
5
5
5
15
%\end{filecontents}
}\mytable

%Define the color series
\definecolor{RYB1}{RGB}{230,97,1}
\definecolor{RYB2}{RGB}{200,150,250}
\pgfplotscreateplotcyclelist{colorbrewer-RYB}{
{RYB1!50!black,fill=RYB1},
{RYB2!50!black,fill=RYB2}} %Do not add a comma after the last element of the list!

%Define the width of the boxes
\def\boxwidth{0.75}%

\begin{tikzpicture}
\begin{axis}[
    scale only axis,
    axis on top,
    ymin=0, ymax=20,
    ylabel={Error [m]},
    boxplot/draw direction=y,
    cycle list name=colorbrewer-RYB,
    xtick={1.5, 4.5},
    xticklabels={Group A, Group B},
    tick align=inside,
    xtick style={draw=none},
    legend style={at={(0.5,-0.15)}, anchor=north,legend columns=-1},
    legend image code/.code={
    \draw[#1, draw=none] (0cm,-0.1cm) rectangle (0.6cm,0.1cm);
    },
]

%Group A
\addplot+[
    boxplot={
        draw position=1,
        average, % <---- Where is the average?
        box extend=\boxwidth
    },
]
table[ y index=0, row sep=newline ]{\mytable}; % <---- Where are the outliers?
\addlegendentry{Yes\;};

\addplot+[
    boxplot={
        draw position=2,
        every average, % <---- This was a desperate try with a surprising result
        box extend=\boxwidth
    },
]
table[ y index=0, row sep=newline ]{\mytable};
\addlegendentry{No\;};

%Group B
\addplot+[
    boxplot prepared={draw position=4,
        lower whisker=2.5,
        lower quartile=4,
        median=5,
        average=6,
    upper quartile=8,
        upper whisker=9,
        box extend=\boxwidth,
    }
]
coordinates {(0,12) (0,10)};

\addplot+[
    boxplot prepared={draw position=5,
        lower whisker=2.5,
        lower quartile=4,
        median=8.5,
        average=10,
    upper quartile=12,
        upper whisker=15,
        box extend=\boxwidth,
    },
]
table[row sep=\\,y index=0] { 0\\ 14\\ 15\\ };

\end{axis}
\end{tikzpicture}
\end{document}

结果是

在此处输入图片描述

添加/功能请求

  • 如果能够像创建条形图一样创建这种分组箱线图就好了。在这些图中,可以指定一组符号坐标,然后使用这些坐标简单地添加条形。具有相同坐标的条形会形成一个组,其中的间距会自动得到很好的处理。

  • 在所呈现的 MWE 中,所有许多维度量都是手动定义的。如果可能的话,能够创建图形,使其在定义其所需的高度和宽度时自动缩放,例如使用类似的东西, \setlength\figureheight{1.5in}% \setlength\figurewidth{1.5in}% 这样就不需要手动更改长度了。为此,我猜能够使用符号坐标添加框会很有帮助。

所呈现的 MWE 存在的问题

前两个图(A组)的数据取自同一张表,而其他两个图(B组)的框是准备好的。上图存在以下问题(我不知道如何解决,显然我做错了什么……)

平均值问题

  • 在第一个框中,我使用了选项“平均值”来绘制平均值,但是它不起作用。
  • 第二次我尝试(偶然)使用“每个平均值”,结果令人惊讶:它绘制了异常值。

如何正确绘制平均值?如果可能的话,可以选择形状(所有框的形状相同)。

异常值问题

我还想绘制所有框中的异常值,如果可能的话还可以选择形状(所有框都相同)。

  • 对于前 2 个图,由于它们是从表中导入的原始数据,我猜异常值的计算是自动的。也许我需要添加正确的选项...我如何添加它们?

  • 对于准备好的图,我尝试添加坐标和表格,但没有成功。我遗漏了什么?

相关内容