Grupos de boxplots usando coordenadas simbólicas

Grupos de boxplots usando coordenadas simbólicas

Eu gostaria de criar um enredo semelhante ao exemplo de gráfico de barras, mas com boxplots em vez de barras.

Até agora o que tenho neste 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}

o que resulta em

insira a descrição da imagem aqui

Solicitação de adições/recursos

  • Seria bom poder criar este tipo de boxplots agrupados da mesma forma que é feito com os gráficos de barras. Nestes, pode-se especificar um conjunto de coordenadas simbólicas e simplesmente adicionar barras usando essas coordenadas. Barras com a mesma coordenada formam então um grupo, no qual o espaçamento é bem cuidado automaticamente.

  • No MWE apresentado todas as muitas grandezas dimensionais são definidas manualmente. Se possível, seria bom poder criar a figura de forma que ela seja dimensionada automaticamente ao definir a altura e largura desejadas, por exemplo, usando algo como \setlength\figureheight{1.5in}% \setlength\figurewidth{1.5in}% para que não haja necessidade de alterar os comprimentos manualmente. Para esse fim, acho que seria útil poder adicionar as caixas usando coordenadas simbólicas.

Problemas com o MWE apresentado

Os dados das duas primeiras parcelas (Grupo A) são retirados da mesma tabela, enquanto as caixas das outras duas (Grupo B) são preparadas. A figura anterior tem os seguintes problemas (que não sei resolver, obviamente estou fazendo algo errado...)

Problemas com médias

  • Na primeira caixa usei a opção ‘média’ com a intenção de traçar a média, mas não funciona.
  • No segundo, tentei (por acidente) usar 'todas as médias', com um resultado surpreendente: ele representa os valores discrepantes.

Como traçar as médias corretamente? Se possível, para que a forma possa ser selecionada (a mesma forma para todas as caixas).

Problemas com valores discrepantes

Também quero traçar os valores discrepantes em todas as caixas, podendo também, se possível, selecionar a forma (a mesma para todas as caixas).

  • No caso dos 2 primeiros gráficos, sendo os dados brutos importados de uma tabela, creio que o cálculo dos outliers seja automático. Talvez eu precise adicionar a opção certa... Como adicioná-las?

  • No caso dos gráficos preparados, tentei adicionar coordenadas e uma tabela, sem sucesso. o que estou perdendo?

informação relacionada