Matplotlib Einführung
Lerne, was Matplotlib ist, wie es funktioniert und wie du deine ersten Diagramme in Python erstellst – mit Liniendiagrammen, Labels und Subplots.
Matplotlib ist die am weitesten verbreitete Bibliothek zur Datenvisualisierung in Python. Dieses Kapitel erklärt, was Matplotlib ist, wie seine Kernarchitektur funktioniert und wie du deine ersten Diagramme erstellst – von einem einfachen Liniendiagramm bis hin zu einer beschrifteten Mehrtafel-Grafik. Die späteren Kapitel dieses Abschnitts gehen auf jeden Diagrammtyp im Detail ein.
Was ist Matplotlib?
Matplotlib ist eine Open-Source-Python-Bibliothek zum Erstellen von statischen, animierten und interaktiven Visualisierungen. John D. Hunter veröffentlichte die erste Version im Jahr 2003, zunächst um MATLABs Plot-Befehle innerhalb von Python nachzubilden. Heute bildet es die Grundlage für viele übergeordnete Visualisierungstools (Seaborn, Pandas .plot(), SciPy) und ist der De-facto-Standard für publikationsreife Abbildungen in Wissenschaft und Technik.
Warum Matplotlib verwenden?
- Viele Diagrammtypen — Linien-, Streu-, Balken-, Histogramm-, Kreis-, Box-, Violin-, Heatmap-, Kontur-, 3D-Oberflächen-Diagramme und mehr.
- Detaillierte Kontrolle — jedes Element einer Abbildung (Achsen, Skalenstriche, Schriftarten, Farben, Legenden) ist erreichbar und konfigurierbar.
- Mehrere Ausgabeformate — PNG, PDF, SVG, EPS und interaktives HTML (über das
widget-Backend). - Ökosystem-Integration — funktioniert direkt mit NumPy-Arrays, Pandas DataFrames und SciPy.
- Kostenlos und Open-Source — BSD-Lizenz, aktive Community, umfangreiche Dokumentation.
Wann sollte man Matplotlib wählen?
Verwende Matplotlib, wenn du präzise, publikationsreife Kontrolle über jedes visuelle Element benötigst oder wenn du auf einem System aufbaust, das eine gut unterstützte, stabile Bibliothek erfordert. Für schnelle explorative Diagramme auf DataFrames ist Pandas' integriertes .plot() (das intern Matplotlib aufruft) oft schneller zu tippen. Für statistische Diagramme mit einer übergeordneten API ist Seaborn eine beliebte Ergänzung, die dennoch erlaubt, für Feinabstimmungen auf Matplotlib zurückzugreifen.
Wie Matplotlib aufgebaut ist
Das Verständnis der zweischichtigen Architektur von Matplotlib spart später viel Verwirrung.
Die Figure- und Axes-Objekte
Jede Matplotlib-Visualisierung lebt innerhalb einer Figure. Eine Figure ist der übergeordnete Container – stell sie dir als Leinwand vor. Innerhalb einer Figure platzierst du ein oder mehrere Axes-Objekte. Ein Axes ist der eigentliche Zeichenbereich, der die x-Achse, y-Achse, Skalenstriche, Gitterlinien und die Daten enthält.
Figure
└── Axes (one or more)
├── x-axis (XAxis)
├── y-axis (YAxis)
├── Title
├── Lines / Patches / Collections (the plotted data)
└── LegendPyplot- vs. objektorientierter Stil
Matplotlib bietet zwei Schnittstellen:
Pyplot-Stil — eine Sammlung von Funktionen in matplotlib.pyplot, die die aktuelle Figure und Axes automatisch verwalten. Dies spiegelt MATLABs Arbeitsablauf wider und ist praktisch für schnelle, einmalige Skripte.
Objektorientierter (OO) Stil — du erstellst Figure- und Axes-Objekte explizit und rufst Methoden auf ihnen auf. Dies wird in Produktionscode, Funktionen und jedem Skript bevorzugt, das mehr als eine Figure erstellt, weil es klar macht, welche Achsen ein Befehl anspricht.
Beide Stile erzeugen identische Ausgaben. Die Beispiele in diesem Kapitel verwenden den OO-Stil und weisen darauf hin, wo sich die pyplot-Kurzschreibweise unterscheidet.
Matplotlib installieren
Matplotlib ist nicht Teil der Python-Standardbibliothek. Installiere es mit pip:
pip install matplotlibWenn du Anaconda oder Miniconda verwendest, ist Matplotlib standardmäßig enthalten. Um es explizit zu installieren:
conda install matplotlibÜberprüfe die Installation:
python -c "import matplotlib; print(matplotlib.__version__)"Matplotlib importieren
Die standardmäßige Import-Konvention in der gesamten Python-Community lautet:
Standardmäßiger Matplotlib-Import
import matplotlib.pyplot as pltDer Alias plt ist allgegenwärtig – jedes Tutorial, Lehrbuch und jede Stack Overflow-Antwort verwendet ihn, also behalte ihn bei.
Wenn du auch NumPy benötigst (häufig zum Generieren von Daten):
Matplotlib und NumPy zusammen importieren
import numpy as np
import matplotlib.pyplot as pltDein erstes Diagramm
Das denkbar einfachste Matplotlib-Skript: zwei Listen von Zahlen, ein Aufruf von plot(), ein Aufruf von show().
Minimales Liniendiagramm
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
fig, ax = plt.subplots() # create Figure and Axes
ax.plot(x, y) # draw a line through the points
plt.show() # open the display window (scripts only)plt.subplots() gibt ein Tupel (fig, ax) zurück. Die meisten Codebeispiele in diesem Abschnitt verwenden dieses Muster, da es eindeutig macht, auf welchem Axes du zeichnest.
In Jupyter Notebooks ist plt.show() optional – Diagramme werden automatisch inline gerendert, wenn eine Zelle die Ausführung beendet.
In eigenständigen Skripten öffnet plt.show() ein Fenster und hält die Ausführung an, bis das Fenster geschlossen wird. Ohne diesen Aufruf beendet sich das Skript, bevor das Fenster erscheint.
Labels und Titel hinzufügen
Achsenbeschriftungen und ein Titel verwandeln ein rohes Diagramm in eine lesbare Abbildung.
Liniendiagramm mit Labels und Titel
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('x')
ax.set_ylabel('x squared')
ax.set_title('Square Numbers')
plt.show()| Methode | Was sie festlegt |
|---|---|
ax.set_xlabel('text') | Beschriftung der horizontalen Achse |
ax.set_ylabel('text') | Beschriftung der vertikalen Achse |
ax.set_title('text') | Titel oberhalb des Diagramms |
Siehe das Kapitel Matplotlib Labels für Optionen zu Schriftgröße, -gewicht und Platzierung.
Linienstil und Farbe anpassen
ax.plot() akzeptiert Schlüsselwortargumente, die das visuelle Erscheinungsbild der Linie steuern.
Gestrichelte rote Linie
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
fig, ax = plt.subplots()
ax.plot(x, y, color='red', linestyle='--', linewidth=2)
ax.set_title('Dashed Red Line')
plt.show()Häufige linestyle-Werte: '-' (durchgehend, Standard), '--' (gestrichelt), ':' (gepunktet), '-.' (Strich-Punkt).
Häufige benannte Farben: 'blue', 'red', 'green', 'orange', 'purple', 'black'. Hex-Codes wie '#1f77b4' funktionieren ebenfalls.
Siehe Matplotlib Line und Matplotlib Markers für eine vollständige Liste der Stiloptionen.
Mehrere Linien darstellen und eine Legende hinzufügen
Rufe ax.plot() mehrmals auf, um mehrere Linien auf denselben Axes zu überlagern. Übergib label= bei jedem Aufruf und rufe dann ax.legend() auf, um die Legendenbox zu rendern.
Zwei überlagerte Linien mit Legende
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 100)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)', linestyle='--')
ax.set_xlabel('Angle (radians)')
ax.set_ylabel('Value')
ax.set_title('Sine and Cosine')
ax.legend()
plt.show()np.linspace(0, 2 * np.pi, 100) erstellt 100 gleichmäßig verteilte Zahlen von 0 bis 2π – eine praktische Methode, um glatte Kurven zu erzeugen.
Subplots erstellen
plt.subplots(rows, cols) erstellt ein Raster von Axes innerhalb einer einzelnen Figure. Du greifst auf jedes Axes über den Index zu.
2×2-Raster mit verschiedenen Diagrammtypen
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
fig, axs = plt.subplots(2, 2, figsize=(8, 6))
axs[0, 0].plot(x, y)
axs[0, 0].set_title('Line')
axs[0, 1].scatter(x[::5], y[::5]) # every 5th point
axs[0, 1].set_title('Scatter')
axs[1, 0].bar(['A', 'B', 'C'], [3, 7, 5])
axs[1, 0].set_title('Bar')
axs[1, 1].hist(np.random.randn(500), bins=20)
axs[1, 1].set_title('Histogram')
fig.tight_layout() # prevent overlapping labels
plt.show()fig.tight_layout() passt den Abstand zwischen Subplots automatisch an, damit sich Titel und Labels nicht überlappen. Es ist fast immer eine gute Idee, diese Methode bei der Verwendung von Subplots aufzurufen.
Siehe Matplotlib Subplot für mehr zu Rasterlayouts, gemeinsamen Achsen und GridSpec.
Abbildungen speichern
Um eine Abbildung in eine Datei zu speichern statt sie interaktiv anzuzeigen, rufe fig.savefig() vor plt.show() auf.
Abbildung als PNG und PDF speichern
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Saved Figure')
fig.savefig('my_plot.png', dpi=150) # raster: PNG at 150 DPI
fig.savefig('my_plot.pdf') # vector: PDF (no DPI needed)
plt.show()Das Argument dpi (dots per inch) steuert die Auflösung für Rasterformate. dpi=150 ist ein gutes Gleichgewicht zwischen Dateigröße und Druckqualität; dpi=300 ist der Standard für Zeitschriften-Abbildungen.
Unterstützte Formate umfassen PNG, PDF, SVG, EPS und TIFF. Matplotlib erkennt das Format automatisch anhand der Dateiendung.
Was kommt als Nächstes?
Dieses Kapitel hat die Kernkonzepte von Matplotlib vorgestellt. Der Rest des Python-Matplotlib-Abschnitts behandelt jedes Thema im Detail:
- Matplotlib Get Started — Installation und erste Schritte im Detail
- Matplotlib Pyplot — die pyplot-Schnittstelle erklärt
- Matplotlib Plotting — Grundlagen des Plottens
- Matplotlib Line — Liniendiagramme und Stiloptionen
- Matplotlib Markers — Datenpunkt-Marker
- Matplotlib Labels — Achsenbeschriftungen, Titel und Anmerkungen
- Matplotlib Grid — Gitterlinien hinzufügen und gestalten
- Matplotlib Subplot — Mehrtafel-Abbildungen
- Matplotlib Scatter — Streudiagramme
- Matplotlib Bars — Balkendiagramme
- Matplotlib Histograms — Verteilungsdiagramme
- Matplotlib Pie Charts — Kreis- und Donut-Diagramme