Matplotlib contour() / contourf()-Funktion


Matplotlib 参考文档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

ParameterTypeBeschreibung
X, Y2D-Array-ähnlich oder 1D-Arrayx- und y-Koordinaten der Gitterpunkte. Wenn 1D-Arrays übergeben werden, werden sie automatisch über meshgrid expandiert
Z2D-Array-ähnlichFunktionswert (Höhe) an jedem Gitterpunkt, gleiche Form wie X, Y
levelsint oder Array-ähnlichKonturebenen: Eine ganze Zahl bedeutet, automatisch N Ebenen zu erzeugen, ein Array bedeutet bestimmte Ebenenwerte
colorscolor oder ListeKonturfarbe (für contour)
cmapstr oder ColormapColormap (für contourf), z. B. 'viridis', 'terrain'
AlphafloatTransparenz 0-1
linewidthsfloat oder ListeLinienbreite (für Kontur)
linestylesstr oder listLinienstil (für Kontur), z. B. 'solid', 'dashed'
extendstrUmgang mit Farben außerhalb des levels-Bereichs: 'neither'/'both'/'min'/'max'
antialiasedboolOb 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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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 matplotlib.pyplot as plt
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.


Matplotlib 参考文档Matplotlib-Referenzdokumentation

Andere Erweiterungen