W3docs

Matplotlib Pyplot

Wie matplotlib.pyplot funktioniert: das zustandsbehaftete Interface, wichtige Funktionen, Figure und Axes, Speichern von Plots und die OO API.

matplotlib.pyplot ist eine Sammlung von Funktionen, die Matplotlib ähnlich wie das Plotsystem von MATLAB verhält. Jede Funktion erstellt oder verändert ein Element einer Figure — Achsen hinzufügen, eine Linie zeichnen, einen Titel setzen — und pyplot verwaltet die „aktuelle" Figure und die aktiven Axes automatisch, sodass Sie keine Objekte weitergeben müssen. Diese Seite erklärt, wie dieses zustandsbehaftete Modell funktioniert, führt durch die wichtigsten pyplot-Funktionen und zeigt, wann man stattdessen die explizite objektorientierte API verwenden sollte.

Was ist matplotlib.pyplot?

Matplotlib hat zwei Hauptinterfaces:

InterfaceZugriffGeeignet für
pyplot (zustandsbehaftet)import matplotlib.pyplot as pltSchnelle Skripte, interaktive Notebooks
Objektorientiertfig, ax = plt.subplots()Komplexe mehrteilige Figures, Bibliotheken, wiederverwendbarer Code

Beide Interfaces sind Teil derselben Bibliothek. pyplot ist eine Komfortschicht — jeder plt.something()-Aufruf manipuliert letztlich dieselben Figure- und Axes-Objekte, die das OO-Interface direkt zugänglich macht. Dieses Zusammenspiel zu verstehen erlaubt es, beide Stile sicher zu kombinieren.

Der Standard-Alias lautet plt:

import matplotlib.pyplot as plt

So funktioniert das zustandsbehaftete Interface

pyplot hält intern eine Referenz auf die aktuelle Figure und die aktuellen Axes. Wenn Sie plt.plot() aufrufen, geht Matplotlib wie folgt vor:

  1. Prüft, ob bereits eine Figure existiert; falls nicht, wird eine erstellt.
  2. Prüft, ob diese Figure Axes hat; falls nicht, wird eine einzelne Axes eingefügt.
  3. Zeichnet die Daten auf diese Axes.
import matplotlib.pyplot as plt

# No figure exists yet — pyplot creates one automatically
plt.plot([1, 2, 3], [4, 6, 5])
plt.title("My first plot")
plt.show()

Figure und Axes wurden implizit erstellt. Das ist praktisch für einzelne Plots, kann aber zu unerwarteten Ergebnissen führen, wenn mehrere Plots im selben Skript ausgeführt werden. Verwenden Sie plt.figure() und plt.clf() (Figure leeren) oder plt.close(), um den Zustand explizit zu steuern.

Wichtige pyplot-Funktionen

plt.plot() — Linien und Marker zeichnen

plt.plot(x, y) ist die grundlegende Funktion. Sie zeichnet Linien, Marker oder beides.

import matplotlib.pyplot as plt

months = [1, 2, 3, 4, 5, 6]
revenue = [12000, 15000, 13500, 17000, 19500, 22000]

plt.plot(months, revenue, color="steelblue", linewidth=2, marker="o", markersize=6)
plt.xlabel("Month")
plt.ylabel("Revenue ($)")
plt.title("Monthly Revenue")
plt.grid(True, linestyle="--", alpha=0.5)
plt.show()

Wichtige Parameter von plt.plot():

ParameterBeispielwerteWirkung
color"red", "#2196F3", (0.1, 0.6, 0.8)Farbe von Linie und Marker
linewidth / lw1, 2.5Linienstärke
linestyle / ls"-", "--", ":", "-."Durchgezogen, gestrichelt, gepunktet, Strich-Punkt
marker"o", "s", "^", "x"Kreis, Quadrat, Dreieck, Kreuz
markersize / ms4, 8Markergröße in Punkten
label"Series A"Text für plt.legend()

plt.xlabel(), plt.ylabel(), plt.title()

Beschriften Sie die Achsen und fügen Sie einen Titel hinzu. Alle drei akzeptieren ein fontsize-Argument:

import matplotlib.pyplot as plt

plt.plot([0, 1, 2], [0, 1, 4])
plt.xlabel("x", fontsize=12)
plt.ylabel("x²", fontsize=12)
plt.title("Quadratic Growth", fontsize=14, fontweight="bold")
plt.show()

plt.legend()

Wenn Sie label= einem Plot-Aufruf übergeben, erzeugt plt.legend() eine Legende im Diagramm:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]

plt.plot(x, [v**1 for v in x], label="Linear")
plt.plot(x, [v**2 for v in x], label="Quadratic")
plt.plot(x, [v**3 for v in x], label="Cubic")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Growth Rates")
plt.legend()
plt.show()

Steuern Sie die Position der Legende mit dem loc-Parameter: "upper left", "lower right", "best" (Standard) usw.

plt.grid()

plt.grid(True) fügt Gitterlinien hinzu. Mit axis="x" oder axis="y" lässt sich das Gitter auf eine Achse beschränken; linestyle und alpha steuern das Aussehen:

plt.grid(True, axis="y", linestyle="--", alpha=0.7)

plt.xlim() und plt.ylim()

Legen Sie den sichtbaren Bereich jeder Achse fest:

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4, 5], [2, 4, 1, 5, 3])
plt.xlim(0, 6)     # show a bit of padding on each side
plt.ylim(0, 7)
plt.show()

plt.xticks() und plt.yticks()

Steuern Sie, welche Tick-Markierungen angezeigt werden und welche Beschriftungen sie tragen:

import matplotlib.pyplot as plt

plt.plot([0, 1, 2, 3, 4], [10, 20, 15, 25, 30])
plt.xticks([0, 1, 2, 3, 4], ["Mon", "Tue", "Wed", "Thu", "Fri"])
plt.yticks([10, 20, 30], ["Low", "Mid", "High"])
plt.show()

plt.figure()

Erstellen Sie explizit eine neue Figure. Das ist wichtig in Skripten, die mehrere separate Plots erzeugen:

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 4))          # width, height in inches
plt.plot([1, 2, 3], [3, 1, 4])
plt.title("Figure with custom size")
plt.show()

figsize steuert die Ausgabegröße. Eine breitere Figure (z. B. (12, 4)) eignet sich für Zeitreihendaten; eine quadratische Figure für Streudiagramme.

plt.savefig()

Speichern Sie die aktuelle Figure in eine Datei, anstatt sie anzuzeigen (oder zusätzlich dazu):

import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [1, 4, 9])
plt.title("Saved Plot")
plt.savefig("output.png", dpi=150, bbox_inches="tight")
plt.show()

Unterstützte Formate sind png, pdf, svg und jpg. bbox_inches="tight" schneidet überschüssigen Leerraum um die Figure ab. Rufen Sie savefig() vor show() auf — show() setzt den Zustand der Figure in manchen Backends zurück.

plt.close() und plt.clf()

In einer Schleife, die viele Figures erzeugt, sollten Sie abgeschlossene Figures immer schließen, um Speicher freizugeben:

plt.close()       # close the current figure
plt.close("all")  # close every open figure
plt.clf()         # clear the current figure without closing its window

Subplots mit pyplot

plt.subplots() ist die Brücke zwischen dem pyplot- und dem OO-Interface. Es erstellt eine Figure und ein oder mehrere Axes-Objekte und gibt beide zurück:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(1, 2, figsize=(10, 4))  # 1 row, 2 columns

# Left panel
axes[0].plot([1, 2, 3], [1, 4, 9], color="steelblue")
axes[0].set_title("Quadratic")
axes[0].set_xlabel("x")
axes[0].set_ylabel("x²")

# Right panel
axes[1].plot([1, 2, 3], [1, 8, 27], color="tomato")
axes[1].set_title("Cubic")
axes[1].set_xlabel("x")
axes[1].set_ylabel("x³")

fig.suptitle("Growth Curves", fontsize=14)
plt.tight_layout()
plt.show()

plt.tight_layout() passt den Abstand zwischen den Teilplots automatisch an, sodass sich Titel und Beschriftungen nicht überlappen.

pyplot vs. die objektorientierte API

Sobald mehr als eine Axes verwendet wird, wird die zustandsbehaftete API schwerer nachvollziehbar. Verwenden Sie die OO API (über fig, ax = plt.subplots()), wenn:

  • Sie mehr als einen Subplot haben.
  • Sie eine Funktion schreiben, die einen Plot erstellt und zurückgibt.
  • Sie eine feinkörnige Kontrolle über Tick-Formatierer, sekundäre Achsen oder eingebettete Axes benötigen.
Aufgabepyplot-StilOO-Stil
Titel setzenplt.title("...")ax.set_title("...")
x-Beschriftung setzenplt.xlabel("...")ax.set_xlabel("...")
x-Grenzen setzenplt.xlim(0, 10)ax.set_xlim(0, 10)
Linie zeichnenplt.plot(x, y)ax.plot(x, y)

Das Muster ist einfach: Die meisten plt.something()-Funktionen haben ein äquivalentes ax.set_something() am Axes-Objekt.

Ein vollständiges Beispiel

Das folgende Skript kombiniert die gängigsten pyplot-Funktionen zu einem in sich geschlossenen, ausführbaren Beispiel:

import matplotlib.pyplot as plt

# Data
years = [2019, 2020, 2021, 2022, 2023]
product_a = [45, 38, 52, 61, 70]
product_b = [30, 42, 39, 55, 65]

# Figure
plt.figure(figsize=(9, 5))

# Two series
plt.plot(years, product_a, marker="o", color="steelblue",
         linewidth=2, label="Product A")
plt.plot(years, product_b, marker="s", color="tomato",
         linewidth=2, label="Product B")

# Labels and decoration
plt.xlabel("Year", fontsize=12)
plt.ylabel("Units Sold (thousands)", fontsize=12)
plt.title("Annual Sales Comparison", fontsize=14)
plt.legend()
plt.grid(True, linestyle="--", alpha=0.5)
plt.xticks(years)

# Save and display
plt.savefig("sales_comparison.png", dpi=150, bbox_inches="tight")
plt.show()

Dieses Beispiel zeigt beide Datenreihen auf denselben Axes, eine Legende, ein Raster, benutzerdefinierte x-Tick-Beschriftungen und speichert das Ergebnis als PNG-Datei.

Häufige Fehlerquellen

plt.show() vergessen — in einem einfachen Python-Skript (nicht Jupyter) öffnet sich das Plotfenster ohne diesen Aufruf nicht. In Jupyter macht %matplotlib inline dies automatisch.

plt.savefig() nach plt.show() aufrufenshow() schließt die Figure ab und setzt sie zurück. Zuerst speichern, dann anzeigen:

plt.savefig("chart.png")  # correct order
plt.show()

Ansammlung mehrerer Figures — in einer Schleife erstellt jeder plt.figure()-Aufruf eine neue Figure, die im Speicher verbleibt, bis plt.close() aufgerufen wird. Schließen Sie Figures, die nicht mehr benötigt werden.

Pyplot- und OO-Stil inkonsistent mischen — es ist in Ordnung, beide zu verwenden, aber seien Sie dabei bewusst: Holen Sie sich das Axes-Objekt und arbeiten Sie direkt damit, anstatt bei mehr als einer Axes auf pyplot's implizite „aktuelle Axes" zu setzen.

Nächste Schritte

Was this page helpful?