Python Matplotlib Plotting: Ein umfassender Leitfaden
Liniendiagramme, Balkendiagramme, Kreisdiagramme, Streudiagramme und Subplots in Python mit Matplotlib erstellen und anpassen – mit klaren Beispielen.
Matplotlib ist die am weitesten verbreitete Datenvisualisierungsbibliothek in Python. Dieser Leitfaden erklärt, wie man die gängigsten Diagrammtypen erstellt — Liniendiagramme, Balkendiagramme, Kreisdiagramme, Streudiagramme und Subplots — und wie man sie mit Beschriftungen, Farben, Legenden und Layout-Einstellungen anpasst. Es wird vorausgesetzt, dass Sie Matplotlib bereits installiert haben und Python-Skripte lokal ausführen können.
Was ist Matplotlib Plotting?
Das pyplot-Modul von Matplotlib bietet eine MATLAB-ähnliche Schnittstelle, mit der Sie Diagramme Schritt für Schritt aufbauen können: eine Figure erstellen, Daten hinzufügen, Beschriftungen hinzufügen und das Ergebnis anzeigen oder speichern. Jedes Diagramm folgt demselben Muster:
matplotlib.pyplotimportieren (üblicherweise alsplt).- Eine Plotting-Funktion aufrufen (
plt.plot(),plt.bar()usw.) mit Ihren Daten. - Decorator-Funktionen aufrufen, um Titel, Achsenbeschriftungen, Legenden und so weiter hinzuzufügen.
plt.show()aufrufen, um die Figure anzuzeigen, oderplt.savefig(), um sie auf die Festplatte zu schreiben.
Das Verstehen dieser Abfolge erleichtert den Wechsel zwischen Diagrammtypen und deren Kombination zu komplexeren Figuren.
Matplotlib installieren
Falls Sie Matplotlib noch nicht installiert haben, führen Sie folgenden Befehl in Ihrem Terminal aus:
pip install matplotlibÜberprüfen Sie die Installation, indem Sie es importieren:
import matplotlib
print(matplotlib.__version__) # e.g. 3.9.0Ein Liniendiagramm erstellen
Ein Liniendiagramm ist der Standard-Diagrammtyp und eignet sich ideal zur Darstellung von Trends über die Zeit oder einer geordneten Folge.
import matplotlib.pyplot as plt
# Data
years = [2015, 2016, 2017, 2018, 2019, 2020]
sales = [100, 150, 200, 250, 300, 350]
# Plot
plt.plot(years, sales)
# Labels and title
plt.xlabel("Year")
plt.ylabel("Sales (units)")
plt.title("Annual Sales")
plt.show()plt.plot(x, y) zeichnet eine durchgehende Linie, die jedes (x, y)-Paar verbindet. Die x-Achse zeigt die Jahre und die y-Achse die Verkaufszahlen, wodurch der Aufwärtstrend auf einen Blick erkennbar wird.
Mehrere Linien plotten
Um zwei Datensätze auf denselben Achsen zu vergleichen, rufen Sie plt.plot() zweimal vor plt.show() auf. Verwenden Sie den Parameter label und plt.legend(), um jede Linie zu kennzeichnen:
import matplotlib.pyplot as plt
years = [2018, 2019, 2020, 2021, 2022]
product_a = [120, 145, 170, 210, 260]
product_b = [90, 115, 140, 165, 195]
plt.plot(years, product_a, label="Product A")
plt.plot(years, product_b, label="Product B")
plt.xlabel("Year")
plt.ylabel("Revenue ($k)")
plt.title("Revenue by Product")
plt.legend()
plt.show()Matplotlib weist jeder Datenreihe automatisch unterschiedliche Farben zu. Der Aufruf von plt.legend() fügt einen Schlüssel hinzu, der Farben den Beschriftungen zuordnet.
Ein Balkendiagramm erstellen
Balkendiagramme vergleichen diskrete Kategorien. Verwenden Sie plt.bar() für vertikale Balken und plt.barh() für horizontale Balken.
import matplotlib.pyplot as plt
countries = ["USA", "China", "Japan", "Germany", "UK"]
gdp = [21.44, 14.14, 5.15, 4.17, 2.62]
plt.bar(countries, gdp, color="steelblue")
plt.xlabel("Country")
plt.ylabel("GDP (USD trillions)")
plt.title("Top 5 Economies by GDP")
plt.show()Die Höhe jedes Balkens repräsentiert den BIP-Wert. Der Parameter color akzeptiert jeden benannten CSS-Farbnamen, einen Hex-String oder ein RGB-Tupel.
Gruppierte Balkendiagramme
Wenn Sie mehrere Kategorien nebeneinander vergleichen möchten, verschieben Sie die Balkenpositionen manuell mit range() und einem Breitenversatz:
import matplotlib.pyplot as plt
categories = ["Q1", "Q2", "Q3", "Q4"]
team_a = [30, 45, 38, 52]
team_b = [25, 40, 35, 48]
x = range(len(categories))
width = 0.35
plt.bar([i - width / 2 for i in x], team_a, width=width, label="Team A")
plt.bar([i + width / 2 for i in x], team_b, width=width, label="Team B")
plt.xticks(x, categories)
plt.xlabel("Quarter")
plt.ylabel("Sales")
plt.title("Quarterly Sales by Team")
plt.legend()
plt.show()plt.xticks(x, categories) ersetzt die numerischen Tick-Positionen durch die tatsächlichen Quartalsnamen.
Ein Kreisdiagramm erstellen
Kreisdiagramme zeigen, wie Teile ein Ganzes bilden. Verwenden Sie sie sparsam — sie eignen sich am besten für fünf oder weniger Segmente, die zusammen 100 % ergeben.
import matplotlib.pyplot as plt
brands = ["Samsung", "Apple", "Huawei", "Xiaomi", "Others"]
market_share = [19.2, 15.9, 14.6, 10.2, 40.1]
plt.pie(
market_share,
labels=brands,
autopct="%1.1f%%", # show percentage inside each slice
startangle=90, # rotate so the first slice starts at the top
)
plt.title("Smartphone Market Share")
plt.show()autopct="%1.1f%%"druckt den Prozentwert auf eine Dezimalstelle in jedem Segment.startangle=90dreht das Diagramm so, dass das erste Segment bei 12 Uhr beginnt, was die Lesbarkeit verbessert.
Hinweis: Die oben genannten Marktanteilszahlen sind Näherungswerte und dienen hier nur zur Veranschaulichung.
Ein Streudiagramm erstellen
Streudiagramme zeigen die Beziehung zwischen zwei kontinuierlichen Variablen. Jeder Punkt repräsentiert eine Beobachtung.
import matplotlib.pyplot as plt
hours_studied = [1, 2, 3, 4, 5, 6, 7, 8]
exam_scores = [45, 52, 60, 65, 72, 78, 85, 90]
plt.scatter(hours_studied, exam_scores, color="coral", edgecolors="black", s=80)
plt.xlabel("Hours Studied")
plt.ylabel("Exam Score")
plt.title("Study Time vs. Exam Score")
plt.show()Der Parameter s steuert die Markergröße in Punkten zum Quadrat. edgecolors="black" fügt jedem Punkt eine Umrandung hinzu, die es erleichtert, Punkte zu unterscheiden, wenn sie sich überlappen.
Für eine vertiefte Betrachtung, siehe das Kapitel Matplotlib Scatter Plot.
Das Erscheinungsbild von Diagrammen anpassen
Matplotlib bietet präzise Kontrolle über nahezu jedes visuelle Element.
Farben, Marker und Linienstile
Übergeben Sie einen Format-String als drittes Argument an plt.plot(), um Markerstil, Linienstil und Farbe in einem Schritt festzulegen:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y, "ro--") # red circles, dashed line
plt.xlabel("x")
plt.ylabel("y")
plt.title("Custom Style")
plt.show()Der Format-String "ro--" kombiniert:
r— rote Farbeo— Kreismarker--— gestrichelte Linie
Häufige Format-String-Codes:
| Code | Bedeutung | Code | Bedeutung |
|---|---|---|---|
b | blau | - | durchgezogene Linie |
g | grün | -- | gestrichelte Linie |
r | rot | -. | Strich-Punkt-Linie |
k | schwarz | : | gepunktete Linie |
o | Kreis | s | Quadrat |
^ | Dreieck oben | * | Stern |
Sie können auch Keyword-Argumente für mehr Kontrolle übergeben:
plt.plot(x, y, color="#2196f3", linewidth=2, linestyle="--", marker="o", markersize=8)Figure-Größe und DPI
Legen Sie die Figure-Abmessungen (in Zoll) vor dem Plotten durch Aufruf von plt.figure() fest:
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5), dpi=100) # 1000×500 pixels
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
plt.plot(x, y)
plt.title("Wide Figure")
plt.show()figsize=(width, height) nimmt Zoll als Einheit. dpi (dots per inch) steuert die Pixeldichte — 100 dpi ist für Bildschirme geeignet; 300 dpi ist typisch für den Druck.
Ein Gitter hinzufügen
Ein Gitter erleichtert das Ablesen von Werten:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [3, 7, 2, 9, 4]
plt.plot(x, y, marker="o")
plt.grid(True, linestyle="--", alpha=0.7)
plt.title("Plot with Grid")
plt.show()alpha=0.7 macht die Gitterlinien halbtransparent, damit sie die Daten nicht überlagern. Weitere Optionen finden Sie im Kapitel Matplotlib Grid.
Subplots erstellen
Subplots ermöglichen die Anzeige mehrerer Diagramme in einer Figure, was nützlich ist, um verschiedene Ansichten desselben Datensatzes zu vergleichen.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 4, 9, 16, 25]
y3 = [5, 3, 7, 2, 8]
y4 = [10, 7, 4, 5, 6]
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
axes[0][0].plot(x, y1, "b-o")
axes[0][0].set_title("Linear")
axes[0][1].plot(x, y2, "r--s")
axes[0][1].set_title("Quadratic")
axes[1][0].bar(x, y3, color="green")
axes[1][0].set_title("Bar Chart")
axes[1][1].scatter(x, y4, color="purple", s=80)
axes[1][1].set_title("Scatter")
plt.tight_layout() # prevent overlapping labels
plt.show()plt.subplots(rows, cols) gibt ein Figure-Objekt und ein 2-dimensionales Array von Axes-Objekten zurück. Das Arbeiten mit einzelnen Axes-Objekten (z.B. axes[0][0].plot(...)) ist der bevorzugte Ansatz für Multi-Plot-Layouts, da er unabhängige Kontrolle über jedes Panel bietet. plt.tight_layout() passt den Abstand automatisch an, sodass sich Titel und Beschriftungen nicht überlappen.
Weitere Layoutoptionen finden Sie im Kapitel Matplotlib Subplots.
Ein Diagramm in eine Datei speichern
plt.savefig() schreibt die aktuelle Figure auf die Festplatte. Das Dateiformat wird aus der Erweiterung abgeleitet:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y, marker="o")
plt.title("Saved Plot")
plt.savefig("my_plot.png", dpi=150, bbox_inches="tight")- Unterstützte Formate sind
.png,.jpg,.svgund.pdf. bbox_inches="tight"schneidet Leerraum um die Figure zu, damit nichts abgeschnitten wird.- Rufen Sie
plt.savefig()immer vorplt.show()auf —plt.show()löscht den Figure-Zustand.
Häufige Fehler
plt.show() löscht die Figure. Wenn Sie plt.savefig() nach plt.show() aufrufen, speichern Sie ein leeres Bild. Immer zuerst speichern, dann anzeigen.
Ausführung in nicht-interaktiven Umgebungen. In Skripten öffnet plt.show() ein GUI-Fenster und blockiert, bis es geschlossen wird. In Jupyter Notebooks verwenden Sie %matplotlib inline am Anfang, damit Diagramme inline gerendert werden. Auf headless-Servern (CI, Docker) wechseln Sie zu einem nicht-interaktiven Backend: import matplotlib; matplotlib.use("Agg") vor dem Import von pyplot.
Vergessen, Figures zu schließen. Jeder Aufruf von plt.figure() öffnet eine neue Figure im Speicher. In Schleifen, die viele Diagramme generieren, schließen Sie jede mit plt.close(), um Speichererschöpfung zu vermeiden.
import matplotlib.pyplot as plt
for i in range(10):
plt.plot([1, 2, 3], [i, i * 2, i * 3])
plt.savefig(f"plot_{i}.png")
plt.close() # release memoryÜberlappende Subplots. Der Aufruf von plt.tight_layout() oder plt.subplots_adjust() nach der Erstellung aller Subplots behebt überlappende Titel und Achsenbeschriftungen.
Zusammenfassung
| Diagrammtyp | Funktion | Am besten geeignet für |
|---|---|---|
| Liniendiagramm | plt.plot() | Trends über geordnete Daten |
| Balkendiagramm | plt.bar() / plt.barh() | Vergleich diskreter Kategorien |
| Kreisdiagramm | plt.pie() | Teil-zu-Ganzes-Zusammensetzung |
| Streudiagramm | plt.scatter() | Beziehung zwischen zwei Variablen |
| Subplots | plt.subplots() | Mehrere Diagramme in einer Figure |
Verwandte Kapitel
- Matplotlib Introduction — Überblick über die Bibliothek und ihre Komponenten
- Matplotlib Get Started — Installation und Ihr erstes Diagramm
- Matplotlib Line Plots — Linienstile, Marker und Mehrreihen-Diagramme im Detail
- Matplotlib Bar Charts — vertikale, horizontale und gestapelte Balken
- Matplotlib Pie Charts — herausgezogene Segmente, benutzerdefinierte Farben und Donut-Diagramme
- Matplotlib Histograms — Verteilungsdiagramme und Bin-Kontrolle
- Matplotlib Scatter Plot — Blasendiagramme und farbkodierte Streudiagramme
- Matplotlib Subplots — erweiterte Multi-Panel-Layouts
- Matplotlib Labels — Titel, Achsenbeschriftungen, Anmerkungen und Text
- Matplotlib Grid — Gitterlinien und Tick-Anpassung
- Matplotlib Markers — Markerstile, -größen und Randfarben