Pakete laden¶
import pandas as pd # Datenmanipulation & Tabellen (ähnlich wie data.frame in R)
import numpy as np # Numerische Berechnungen, Zufallszahlen, Arrays
import matplotlib.pyplot as plt # Erstellen von statischen Diagrammen (z. B. Boxplots, Linienplots)
import seaborn as sns # Erweiterung für matplotlib – hübschere Statistiken & Plots
# Erstelle einen DataFrame mit zwei Gruppen ("A" und "B") und Zufallswerten
np.random.seed(42) # Für reproduzierbare Ergebnisse
data = pd.DataFrame({
"name": ["A"] * 50 + ["B"] * 50, # 50x "A", 50x "B"
"value": np.concatenate([
np.random.normal(loc=12, scale=6, size=50), # Zufallswerte Gruppe A
np.random.normal(loc=19, scale=10, size=50) # Zufallswerte Gruppe B
])
})
print(data.head()) # Zeige die ersten Zeilen
name value 0 A 14.980285 1 A 11.170414 2 A 15.886131 3 A 21.138179 4 A 10.595080
Defintion¶
Der Box-Plot (auch Whisker-Plot genannt) zählt zu den grafischen Darstellungsmöglichkeiten in der deskriptiven Statistik. In erster Linie werden die Lagedaten dargestellt.
Beschreibung¶
Der Box-Plot (auch Whisker-Plot genannt) zählt zu den grafischen Darstellungsmöglichkeiten in der deskriptiven Statistik. In ihm werden in komprimierter Form verschiedene Verteilungsparameter dargestellt. So sind neben den gängigen Lagemaßen (Median, Quartilswerte) auch Streuungsmaße (Spannweite, Interquartilsabstand) und die Form der Verteilung (linkssteil, symmetrisch oder rechtssteil) ablesbar (Grafik Nr…). Gleichfalls lassen sich mit ihm die Existenz von Ausreißern grafisch darstellen und dazugehörige Aussagen treffen. Eine noch größere Informationsdichte kann durch das Nebeneinanderstellen mehrerer Box-Plots erzielt werden (Grafik Nr…).
Lagemaße¶
Median Der Median wird durch die fettgedruckte Linie in der Box angezeigt. Die eine Hälfte der beobachteten Werte ist kleiner oder gleich dem Wert, die andere Hälfte der beobachteten Werte ist größer oder gleich dem Wert. Weitere Infos unter Zentralmaße.
Box für Interquartilsbereich
Die Box für den Interquartilsbereich stellt die mittleren 50 % der Daten dar. Sie gibt den Abstand zwischen dem ersten und dem dritten Quartil (Q3–Q1) an.
Minimum- und Maximalwert (Whisker)
Der Minimum- und Maximalwert gehen von beiden Seiten der Box aus. Sie stellen die Bereiche für die unteren 25 % und die oberen 25 % der Datenwerte dar.
Voraussetzung¶
✓ Die Daten sollen min. ordinalskaliert sein - besser metrisch.
Gestaltung¶
- unterschiedliche Farben pro Boxplot
- Benennung
- Boxplot - bunt
Code¶
Allgemein¶
# Boxplot
plt.figure(figsize=(6, 4))
plt.boxplot(data["value"]) # Alle Werte in einem gemeinsamen Plot
plt.title("Ich bin ein Boxplot") # Titel
plt.xlabel("Zufallswerte") # Beschriftung der x-Achse
plt.grid(True)
plt.show()
Teilen der Boxplots¶
# Boxplot gruppiert nach "name" (A und B)
plt.figure(figsize=(6, 4))
# Erzeuge Boxplot nach Gruppen (A und B)
data.boxplot(
column="value",
by="name",
grid=True,
patch_artist=True, # Damit Farbe wirkt
boxprops=dict(facecolor="lightblue"), # Farbe für Boxen
)
plt.title("Ich bin ein Boxplot") # Titel
plt.suptitle("") # Entfernt Standard-Untertitel von pandas
plt.xlabel("Zufallswerte") # x-Achsenbeschriftung
plt.ylabel("Ausprägung") # y-Achsenbeschriftung
plt.show()
<Figure size 600x400 with 0 Axes>
Mittelwerte hinzufügen¶
# Stil setzen
sns.set_theme(style="darkgrid")
# Boxplot erstellen mit deinen Daten
ax = sns.boxplot(x="name", y="value", data=data)
# Mittelwerte pro Gruppe berechnen
means = data.groupby('name')['value'].mean().values # Mittelwerte der Gruppen
means_text = [f"Ø: {m:.2f}" for m in means] # Format als "Ø: 14.37"
# Positionen zum Platzieren des Texts
positions = range(len(means_text))
# Text (Mittelwert) über die Box schreiben
for pos, label in zip(positions, ax.get_xticklabels()):
ax.text(
pos, # x-Position
means[pos] + 0.3, # y-Position leicht über dem Mittelwert
means_text[pos], # Text, z. B. "Ø: 14.52"
horizontalalignment='center',
size='small',
color='white',
weight='semibold'
)
# Achsentitel etc.
ax.set_title("Gruppierter Boxplot mit Mittelwerten")
ax.set_xlabel("Gruppe")
ax.set_ylabel("Wert")
plt.tight_layout()
plt.show()
Boxplot und Jitter¶
# Stil setzen
sns.set_theme(style="darkgrid")
# Boxplot erstellen für Gruppen A und B
ax = sns.boxplot(x="name", y="value", data=data)
# Stripplot (Jitter) darüberlegen – zeigt einzelne Punkte leicht versetzt
sns.stripplot(
x="name",
y="value",
data=data,
color="orange", # Punktfarbe
jitter=0.2, # Horizontal versetzt für bessere Sichtbarkeit
size=3, # Punktgröße
alpha=0.6 # Transparenz
)
# Titel und Layout
plt.title("Boxplot mit Jitter-Punkten", loc="center")
plt.xlabel("Gruppe")
plt.ylabel("Wert")
plt.tight_layout()
plt.show()