
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
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?