
Ich möchte eine Handlung ähnlich der Beispiel für ein Balkendiagramm, aber mit Boxplots statt Balken.
Bisher habe ich dieses 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}
was dazu führt
Ergänzungen/Features anfordern
Es wäre schön, wenn man diese Art von gruppierten Boxplots ähnlich erstellen könnte wie die Balkenplots. Dabei kann man einen Satz symbolischer Koordinaten angeben und einfach Balken mit diesen Koordinaten hinzufügen. Balken mit denselben Koordinaten bilden dann eine Gruppe, bei der der Abstand automatisch berücksichtigt wird.
Im vorgestellten MWE werden alle Dimensionsmengen manuell definiert. Wenn möglich, wäre es schön, die Figur so erstellen zu können, dass sie beim Definieren der gewünschten Höhe und Breite automatisch skaliert wird, beispielsweise mithilfe von etwas wie,
\setlength\figureheight{1.5in}% \setlength\figurewidth{1.5in}%
sodass die Längen nicht manuell geändert werden müssen. In diesem Zusammenhang wäre es meiner Meinung nach hilfreich, die Kästen mithilfe symbolischer Koordinaten hinzufügen zu können.
Probleme mit dem vorgestellten MWE
Die Daten der ersten beiden Diagramme (Gruppe A) stammen aus derselben Tabelle, während die Felder der anderen beiden (Gruppe B) vorbereitet sind. Die vorherige Abbildung weist die folgenden Probleme auf (ich weiß nicht, wie ich sie lösen soll, offensichtlich mache ich etwas falsch ...)
Probleme mit Durchschnittswerten
- Im ersten Feld habe ich die Option „Durchschnitt“ verwendet, um den Durchschnitt darzustellen, aber das funktioniert nicht.
- Im zweiten habe ich (aus Versehen) versucht, stattdessen „jeden Durchschnitt“ zu verwenden, mit einem überraschenden Ergebnis: Die Ausreißer werden angezeigt.
Wie werden die Mittelwerte richtig dargestellt? Wenn möglich so, dass die Form wählbar ist (dieselbe Form für alle Boxen).
Probleme mit Ausreißern
Ich möchte auch die Ausreißer in allen Boxen darstellen und wenn möglich auch die Form auswählen können (für alle Boxen gleich).
Bei den ersten beiden Diagrammen, bei denen es sich um aus einer Tabelle importierte Rohdaten handelt, gehe ich davon aus, dass die Berechnung der Ausreißer automatisch erfolgt. Vielleicht muss ich die richtige Option hinzufügen ... Wie füge ich sie hinzu?
Bei den vorbereiteten Diagrammen habe ich versucht, Koordinaten und eine Tabelle hinzuzufügen, ohne Erfolg. Was übersehe ich?