Pakete laden¶

In [2]:
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
In [3]:
# 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¶

In [4]:
# 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()
No description has been provided for this image

Teilen der Boxplots¶

In [5]:
# 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>
No description has been provided for this image

Mittelwerte hinzufügen¶

In [6]:
# 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()
No description has been provided for this image

Boxplot und Jitter¶

In [7]:
# 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()
No description has been provided for this image

https://www.geeksforgeeks.org/python/boxplot-using-seaborn-in-python/?utm_source=chatgpt.com