Matplotlib contour() / contourf()-Funktion
Matplotlib-Referenzdokumentation
contour()Konturlinien zeichnen,contourf()Gefüllte Konturen zeichnen.
Beide werden verwendet, um 2D-Skalarfelder zu visualisieren (wie z. B. Geländekarten, Temperaturfelder, Druckfelder usw.).
Funktionsdefinition
pyplot-Schnittstelle
matplotlib.pyplot.contour(*args, **kwargs) matplotlib.pyplot.contourf(*args, **kwargs)
Axes-Schnittstelle
Axes.contour(X, Y, Z, levels=None, **kwargs) Axes.contourf(X, Y, Z, levels=None, **kwargs)
Parameterbeschreibung
| Parameter | Type | Beschreibung |
|---|---|---|
| X, Y | 2D-Array-ähnlich oder 1D-Array | x- und y-Koordinaten der Gitterpunkte. Wenn 1D-Arrays übergeben werden, werden sie automatisch über meshgrid expandiert |
| Z | 2D-Array-ähnlich | Funktionswert (Höhe) an jedem Gitterpunkt, gleiche Form wie X, Y |
| levels | int oder Array-ähnlich | Konturebenen: Eine ganze Zahl bedeutet, automatisch N Ebenen zu erzeugen, ein Array bedeutet bestimmte Ebenenwerte |
| colors | color oder Liste | Konturfarbe (für contour) |
| cmap | str oder Colormap | Colormap (für contourf), z. B. 'viridis', 'terrain' |
| Alpha | float | Transparenz 0-1 |
| linewidths | float oder Liste | Linienbreite (für Kontur) |
| linestyles | str oder list | Linienstil (für Kontur), z. B. 'solid', 'dashed' |
| extend | str | Umgang mit Farben außerhalb des levels-Bereichs: 'neither'/'both'/'min'/'max' |
| antialiased | bool | Ob Anti-Aliasing aktiviert werden soll (für contourf), standardmäßig True |
clabel() Ergänzende Hinweise
clabel()Wird verwendet, um Wertbeschriftungen an Konturlinien hinzuzufügen.
Axes.clabel(CS, levels=None, **kwargs)
Anwendungsbeispiele
Beispiel 1: Einfache Kontur + gefüllte Kontur im Vergleich
Beispiel
import numpy as np
# 2D-Gitter und Funktionswerte erstellen
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y) # 2D-Funktion
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5),
layout='constrained')
# Linkes Diagramm: Konturlinien (contour)
cs1 = ax1.contour(X, Y, Z, levels=10, cmap='viridis')
ax1.clabel(cs1, inline=True, fontsize=8) # Beschriftungen hinzufügen
ax1.set_title('contour() - Linienkonturen')
# Rechtes Diagramm: gefüllte Konturen (contourf)
cs2 = ax2.contourf(X, Y, Z, levels=15, cmap='RdYlBu')
fig.colorbar(cs2, ax=ax2, label='Wert')
# Grenzlinien überlagern
ax2.contour(X, Y, Z, levels=15, colors='black', linewidths=0.3)
ax2.set_title('contourf() - Gefüllte Konturen')
for ax in [ax1, ax2]:
ax.set_xlabel('X')
ax.set_ylabel('Y')
plt.show()
Beispiel 2: Benutzerdefinierte Stufen
Beispiel
import numpy as np
x = np.linspace(-5, 5, 150)
y = np.linspace(-5, 5, 150)
X, Y = np.meshgrid(x, y)
# Gaußsche Hügel
Z = np.exp(-((X-1)**2 + Y**2) / 4) +
np.exp(-((X+1)**2 + Y**2) / 3)
fig, ax = plt.subplots(figsize=(7, 5), layout='constrained')
# Benutzerdefinierte Level: 0.1 bis 1.0, Intervall 0.1
custom_levels = np.arange(0.1, 1.1, 0.1)
cs = ax.contourf(X, Y, Z, levels=custom_levels,
cmap='YlOrRd', extend='both')
cbar = fig.colorbar(cs, ax=ax, label='Höhe')
ax.contour(X, Y, Z, levels=custom_levels,
colors='black', linewidths=0.5)
ax.set_title('Kontur mit benutzerdefinierten Levels')
ax.set_xlabel('X')
ax.set_ylabel('Y')
plt.show()
Beispiel 3: Geländekartenstil (terrain-Farbpalette)
Beispiel
import numpy as np
x = np.linspace(-4, 4, 200)
y = np.linspace(-4, 4, 200)
X, Y = np.meshgrid(x, y)
# Gelände simulieren: zwei Gipfel + ein Tal
Z = 3 * np.exp(-((X+2)**2 + Y**2) / 3) +
2 * np.exp(-((X-1)**2 + (Y-1)**2) / 2) -
1 * np.exp(-((X+0.5)**2 + (Y-2)**2) / 1.5)
fig, ax = plt.subplots(figsize=(8, 6), layout='constrained')
# Verwende die terrain-Colormap, um ein Gelände zu simulieren
cs = ax.contourf(X, Y, Z, levels=20, cmap='terrain', extend='both')
fig.colorbar(cs, ax=ax, label='Höhe', shrink=0.8)
ax.contour(X, Y, Z, levels=20, colors='black', linewidths=0.3,
Alpha=0.4)
ax.set_title('Konturkarte im Geländestil')
ax.set_xlabel('X (km)')
ax.set_ylabel('Y (km)')
plt.show()
print("Beispiel: Geländekontur angezeigt")
Häufig gestellte Fragen
Wann verwendet man contour vs. contourf?
contour()contour: geeignet zum Betrachten klarer Grenzlinien, wie z. B. Isobaren.
contourf()contourf: geeignet zur Darstellung kontinuierlich variierender Felder, wie z. B. Temperaturverteilung.
Eine gängige Praxis ist, beide zu überlagern: contourf füllt Farbflächen und contour zeichnet Grenzlinien darüber.
Müssen X, Y 2D sein?
Nein. Wenn 1D-Arrays als X und Y übergeben werden, ruft matplotlib automatischnp.meshgrid(X, Y)meshgrid auf, um ein 2D-Gitter zu erzeugen. Z muss zur Form nach meshgrid passen.
Andere Erweiterungen