Pakete laden¶

In [1]:
import pandas as pd          # Für Datenmanipulation und Tabellen
import numpy as np           # Für numerische Operationen und Array-Verarbeitung
import matplotlib.pyplot as plt  # Für die Erstellung von Diagrammen und Visualisierungen

Defintion¶

Das Kreisdiagramm wird für die Darstellung von Anteilen in einer Gruppe verwendet.

Beschreibung¶

Ein Kreisdiagramm ist ein Kreis, der in verschiedene Kreissektoren aufgeteilt ist. Der Kreis kann in zwei oder mehr Kreissektoren aufgeteilt werden, welche nicht gleich groß sein müssen. 100% entsprechen dem ganzen Kreis, also 360°. Zum Beispiel entsprechen 25% einem Viertelkreis und somit 1/4⋅360° = 360° : 4 = 90°.

Um also Prozentsätze in einem Kreisdiagramm darzustellen, rechnest du entweder mit der Prozentformel oder mit dem Dreisatz die entsprechenden Winkelgrößen aus.

Das Kreisdiagramm, auch Torten- oder Kuchendiagramm (engl. Pie chart) genannt, ist eine kreisförmige grafische Darstellung von relativen Anteilen, Prozenten oder Häufigkeiten verschiedener Klassen eines quantitativen statistischen Merkmals oder nominalskalierten Merkmals. Entsprechend der Häufigkeit oder des Anteils werden die Klassen in unterschiedlich großen Segmenten im Diagramm abgebildet. So sind die relativen Größen und damit die Bedeutung der einzelnen Klassen auf den ersten Blick zu erfassen.

Voraussetzung¶

✓ Die zu untersuchende Merkmale sollen kategorial (nominal- oder ordinalskaliert) sein.

Gestaltung¶

Farbe
Achsenbenennung
Überschriften

Code¶

In [2]:
data = pd.DataFrame({  # Erstelle ein DataFrame
    "name": (
        ["braunhaarig"] * 15 +  # 15 braunhaarige
        ["blond"] * 5 +         # 5 blonde
        ["rothaarig"] * 10 +    # 10 rothaarige
        ["schwarzhaarig"] * 12 +# 12 schwarzhaarige
        ["bunthaarig"] * 4      # 4 bunthaarige
    )
})

print(data.head())  # Zeige die ersten Zeilen des DataFrames
          name
0  braunhaarig
1  braunhaarig
2  braunhaarig
3  braunhaarig
4  braunhaarig

Allgemein¶

In [3]:
# zählt die Häufigkeiten der Haarfarben
mytable = data["name"].value_counts()  # Zähle Vorkommen je Haarfarbe
print(mytable)  # Ausgabe der Häufigkeiten
name
braunhaarig      15
schwarzhaarig    12
rothaarig        10
blond             5
bunthaarig        4
Name: count, dtype: int64
In [4]:
# erstellt ein Kreisdiagramm der Haarfarben

colors = ["gold", "brown", "green", "red", "black"]  # Farben für die Segmente
labels = [f"{name}\n{count}" for name, count in zip(mytable.index, mytable.values)]  # Beschriftung

plt.pie(mytable.values, labels=labels, colors=colors)  # Erstelle das Kreisdiagramm
plt.title("Kreidiagramm\nHaarfarben")  # Titel
plt.show()  # Diagramm anzeigen
No description has been provided for this image

Matplotlib¶

In [5]:
# Vorbereitung der Daten
values = mytable.values   # Hole die Anzahl je Haarfarbe aus der Häufigkeitstabelle
labels = mytable.index    # Hole die Namen der Haarfarben (z. B. "blond", "braunhaarig", ...)

# Erstelle ein leeres Kreisdiagramm-Fenster mit definierter Größe (6x6 Zoll)
fig, ax = plt.subplots(figsize=(6, 6))

# Zeichne das Kreisdiagramm
ax.pie(
    values,               # Werte für die einzelnen Segmente
    labels=labels,        # Beschriftungen der Segmente (Haarfarben)
    autopct='%.1f%%',     # Zeige Prozente mit einer Nachkommastelle an
    wedgeprops={          # Stil der „Kuchenstücke“
        'linewidth': 3.0,     # Stärke der Linien zwischen Segmenten
        'edgecolor': 'white'  # Farbe der Linien zwischen Segmenten (weiß)
    },
    textprops={           # Eigenschaften der Beschriftung
        'size': 'x-large'     # Große Schrift für bessere Lesbarkeit
    }
)

# Setze den Titel des Diagramms mit größerer Schrift
ax.set_title("Haarfarben\nVerteilung", fontsize=18)

# Optimiert das Layout automatisch, damit alles gut passt
plt.tight_layout()

# Zeige das Diagramm an
plt.show()
No description has been provided for this image
In [6]:
# Daten aus deiner Häufigkeitstabelle
x = mytable.values       # Anzahl je Haarfarbe
labels = mytable.index   # Haarfarben-Namen

# Definiere passende Farben zur jeweiligen Haarfarbe
farben_mapping = {
    "braunhaarig": "saddlebrown",  # braun
    "blond": "gold",               # gelb
    "rothaarig": "red",            # rot
    "schwarzhaarig": "black",      # schwarz
    "bunthaarig": "dodgerblue"     # blau
}

# Erstelle eine Farbliste passend zur Reihenfolge der Labels
colors = [farben_mapping[label] for label in labels]

# Optional: ein Segment hervorheben (z. B. bunt)
explode = [0.1 if label == "bunthaarig" else 0 for label in labels]

# Zeichne das Kreisdiagramm
fig, ax = plt.subplots(figsize=(6, 6))
patches, texts, pcts = ax.pie(
    x,
    labels=labels,
    autopct='%.1f%%',  # Prozentanzeige mit einer Nachkommastelle
    wedgeprops={'linewidth': 3.0, 'edgecolor': 'white'},  # Weiße Ränder
    textprops={'size': 'x-large'},  # Große Schrift
    startangle=90,  # Startwinkel
    colors=colors,
    explode=explode  # Segment hervorheben
)

# Setze die Schriftfarbe der Labels auf die Segmentfarbe
for i, patch in enumerate(patches):
    texts[i].set_color(patch.get_facecolor())

# Prozentzahlen weiß darstellen
plt.setp(pcts, color='white')

# Labels fett setzen
plt.setp(texts, fontweight=600)

# Titel setzen
ax.set_title('Haarfarben – Verteilung', fontsize=18)

# Layout
plt.tight_layout()
plt.show()
No description has been provided for this image