Matplotlib pie()-Funktion


Matplotlib 参考文档Matplotlib-Referenzdokumentation

pie()Wird zum Zeichnen von Kreisdiagrammen verwendet, die das proportionale Verhältnis jedes Teils zum Ganzen zeigen.

Kreisdiagramme eignen sich zur Darstellung der Anteile einer kleinen Anzahl von Kategorien (meist im Bereich von 5-8).

Funktionsdefinition

pyplot-Schnittstelle

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None,
    autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1,
    startangle=0, radius=1, counterclock=True, wedgeprops=None,
    textprops=None, center=(0, 0), frame=False, rotatelabels=False, *,
    normalize=True, hatch=None, **kwargs)

Axes-Schnittstelle

Axes.pie(x, explode=None, labels=None, colors=None, autopct=None,
    pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0,
    radius=1, counterclock=True, wedgeprops=None, textprops=None,
    center=(0, 0), frame=False, rotatelabels=False, *,
    normalize=True, hatch=None, **kwargs)

Parameterbeschreibung

ParameterTypeBeschreibung
x1D-Array-ähnlichDer Wert jedes Sektors (erforderlich), automatisch normalisiert.
explodearray-ähnlichDer Abstand, um den jeder Sektor vom Mittelpunkt versetzt ist; 0 bedeutet kein Versatz.
labelsListeBeschriftungstext für jeden Sektor.
colorsListeFarbe jedes Sektors.
autopctstr oder callableProzentsätze automatisch anzeigen, z. B. '%1.1f%%' bedeutet eine Nachkommastelle; None blendet sie aus.
pctdistancefloatAbstandsverhältnis des Prozenttextes vom Mittelpunkt, Standard 0.6.
shadowboolOb ein Schatteneffekt hinzugefügt werden soll.
labeldistancefloatAbstandsverhältnis der Beschriftungen vom Mittelpunkt, Standard 1.1.
startanglefloatStartwinkel des ersten Sektors (gegen den Uhrzeigersinn); 0 bedeutet, dass bei der 3-Uhr-Richtung begonnen wird.
radiusfloatRadius des Kreisdiagramms, Standard 1.
counterclockboolSektorrichtung: True ist gegen den Uhrzeigersinn (Standard), False ist im Uhrzeigersinn.
wedgepropsdictParameter, die an jeden Sektor (Wedge) übergeben werden, z. B. {'edgecolor':'white', 'linewidth':1}
textpropsdictParameter, die an Text übergeben werden, z. B. {'fontsize':12, 'color':'gray'}
centertupleMittelpunktkoordinaten des Kreisdiagramms, Standard (0, 0).
normalizeboolOb x so normalisiert werden soll, dass die Gesamtsumme 1 ergibt, Standard True.

pie() gibt drei Listen zurück:(patches, texts, autotexts)patches sind die Sektorobjekte, texts sind die Beschriftungstexte und autotexts sind die Prozenttexte.


Anwendungsbeispiele

Beispiel 1: Einfaches Kreisdiagramm

Beispiel

import matplotlib.pyplot as plt

# Daten
sizes = [30, 25, 20, 15, 10]
labels = ['Python', 'Java', 'JavaScript', 'C++', 'Go']
colors = ['#3498db', '#e74c3c', '#f39c12', '#2E7DCC', '#9b59b6']

fig, ax = plt.subplots(layout='constrained')

# Kreisdiagramm zeichnen
ax.pie(sizes, labels=labels, colors=colors,
       autopct='%1.1f%%',         # Prozentsätze anzeigen, eine Nachkommastelle beibehalten
       startangle=90,             # Von der 12-Uhr-Richtung aus starten
       wedgeprops={'edgecolor': 'white', 'linewidth': 1})

ax.set_title('Nutzung von Programmiersprachen')
plt.show()

Beispiel 2: Hervorheben eines bestimmten Sektors (explode)

Beispiel

import matplotlib.pyplot as plt

sizes = [35, 25, 20, 12, 8]
labels = ['Search', 'Social', 'Direct', 'Email', 'Referral']
explode = (0.1, 0, 0, 0, 0)  # Verschiebe den ersten Sektor (Search) um 0.1

fig, ax = plt.subplots(layout='constrained')

wedges, texts, autotexts = ax.pie(
    sizes, labels=labels, explode=explode,
    autopct='%1.1f%%', startangle=90,
    colors=['#2E7DCC', '#3498db', '#9b59b6', '#f39c12', '#e74c3c'],
    wedgeprops={'edgecolor': 'white', 'linewidth': 1},
    textprops={'fontsize': 11})

# Ändere die Farbe des Prozenttextes
for autotext in autotexts:
    autotext.set_color('white')
    autotext.set_fontweight('bold')

ax.set_title('Website-Traffic-Quellen', fontsize=14)
plt.show()

Beispiel 3: Donut-Diagramm (Doughnut-Diagramm)

Beispiel

import matplotlib.pyplot as plt

sizes = [40, 30, 20, 10]
labels = ['Chrome (40%)', 'Safari (30%)', 'Firefox (20%)', 'Sonstige (10%)']

fig, ax = plt.subplots(layout='constrained')

# Verwende wedgeprops, um width festzulegen, um ein Donut-Diagramm zu erstellen
wedges, texts = ax.pie(
    sizes, labels=labels,
    startangle=90,
    colors=['#4285F4', '#346EA8', '#FBBC05', '#EA4335'],
    wedgeprops={'width': 0.4,      # Sektorbreite (0~1); wenn <1, wird daraus ein Donut
                'edgecolor': 'white', 'linewidth': 2})

ax.set_title('Browser-Marktanteil (Donut-Diagramm)', fontsize=14)
plt.show()

Beispiel 4: Mehrstufiges Donut-Diagramm

Beispiel

import matplotlib.pyplot as plt

# Daten der äußeren Schicht und der inneren Schicht
outer_sizes = [35, 30, 20, 15]
inner_sizes = [40, 30, 30]

outer_labels = ['Asien', 'Europa', 'Amerika', 'Afrika']
inner_labels = ['Mobil', 'Desktop', 'Tablet']

outer_colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#71A0CE']
inner_colors = ['#FFE0B2', '#BBDEFB', '#C8D7E6']

fig, ax = plt.subplots(layout='constrained')

# Äußerer Ring
ax.pie(outer_sizes, radius=1.3,
       labels=outer_labels,
       labeldistance=1.1,
       colors=outer_colors,
       wedgeprops={'width': 0.3, 'edgecolor': 'white', 'linewidth': 2})

# Innerer Ring
ax.pie(inner_sizes, radius=1.0,
       labels=inner_labels,
       labeldistance=0.75,
       colors=inner_colors,
       wedgeprops={'width': 0.3, 'edgecolor': 'white', 'linewidth': 2})

ax.set_title('Mehrstufiges Donut-Diagramm', fontsize=14)
plt.show()

FAQ

Kreisdiagramm vs. Balkendiagramm: Wann welches verwenden?

Kreisdiagramme eignen sich zur Darstellung von Anteilen bei bis zu 5-8 Kategorien, sodass Leser den Anteil am Ganzen intuitiv erfassen können.

Wenn es zu viele Kategorien gibt (mehr als 8) oder ein präziser numerischer Vergleich erforderlich ist, ist ein Balkendiagramm vorzuziehen.

autopct-Format-Erklärung?

'%1.1f%%'Bedeutet eine Gleitkommazahl mit einer minimalen Gesamtbreite von 1 Ziffer und 1 Dezimalstelle, gefolgt von%%(Prozentzeichen).

Sie können auch eine Funktion übergeben, wie zum Beispielautopct=lambda pct: f'{pct:.1f}%'。


Matplotlib 参考文档Matplotlib-Referenzdokumentation

Andere Erweiterungen