Matplotlib fill_between() / fill_betweenx()-Funktion


Matplotlib 参考文档Matplotlib-Referenzdokumentation

fill_between()Wird verwendet, um den Bereich zwischen zwei horizontalen Kurven zu füllen,fill_betweenx()Füllt den Bereich zwischen zwei vertikalen Kurven.

Wird häufig verwendet, um Konfidenzintervalle, Unsicherheitsbereiche, Differenzbereiche usw. zu visualisieren.

Funktionsdefinition

matplotlib.pyplot.fill_between(x, y1, y2=0, where=None,
    interpolate=False, step=None, **kwargs)
matplotlib.pyplot.fill_betweenx(y, x1, x2=0, where=None,
    interpolate=False, step=None, **kwargs)

Parameterbeschreibung

ParameterTypeBeschreibung
x / yarrayDatenpunkte der ersten Koordinatenachse
y1, y2 / x1, x2Array oder SkalarZwei Kurven. Ein Skalar stellt eine konstante Linie dar. y2 ist standardmäßig 0 und füllt bis zur x-Achse.
wobeiArray aus boolGibt an, welche Intervalle gefüllt werden müssen. True füllt, False füllt nicht.
interpolateboolWenn True, interpolieren, um präzise Grenzen an Kurvenschnittpunkten zu berechnen.
SchrittweitestrSchrittfüllung: 'pre', 'post', 'mid'
color / facecolorcolorFüllfarbe
AlphafloatTransparenz
labelstrLegendenbeschriftung
hatchstrFüllmuster: '/'、'\'、'|'、'-'、'+'、'x'、'*'

fill_between und fill_betweenx geben einPolyCollectionObjekt zurück, das für spätere Änderungen verwendet oder an colorbar übergeben werden kann


Anwendungsbeispiele

Beispiel 1: Füllen bis zur x-Achse (Standard y2=0)

Beispiel

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

fig, ax = plt.subplots(layout='constrained')

# Die Hauptkurve plotten
ax.plot(x, y, 'b-', linewidth=2, label='sin(x)')
# Fläche zwischen der Kurve und der x-Achse füllen
ax.fill_between(x, y, alpha=0.3, color='blue',
                label='Fläche unter der Kurve')

ax.set_title('fill_between: Fläche zwischen Kurve und X-Achse')
ax.set_xlabel('x')
ax.set_ylabel('sin(x)')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

Beispiel 2: Konfidenzintervall (Fläche zwischen zwei Kurven)

Beispiel

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y_mean = np.sin(x) + 5                     # Mittelwertlinie
y_std = 0.3 + 0.1 * x                      # Standardabweichung nimmt mit x zu

# Obere und untere Grenzen
y_upper = y_mean + y_std
y_lower = y_mean - y_std

fig, ax = plt.subplots(figsize=(8, 5), layout='constrained')

# Konfidenzintervall auf beiden Seiten des Mittelwerts füllen
ax.fill_between(x, y_lower, y_upper,
                alpha=0.3, color='steelblue',
                label='Konfidenzintervall')
# Mittelwertlinie zeichnen
ax.plot(x, y_mean, 'steelblue', linewidth=2, label='Mittelwert')
# Obere und untere Grenzen zeichnen
ax.plot(x, y_upper, 'steelblue', linewidth=0.5, Alpha=0.5)
ax.plot(x, y_lower, 'steelblue', linewidth=0.5, Alpha=0.5)

ax.set_title('Konfidenzintervall (fill_between)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

Beispiel 3: Bedingtes Füllen mit dem where-Parameter

Beispiel

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 200)
y1 = np.sin(x)
y2 = np.cos(x)

fig, ax = plt.subplots(figsize=(8, 5), layout='constrained')

ax.plot(x, y1, 'blue', label='sin(x)')
ax.plot(x, y2, 'red', label='cos(x)')

# Nur füllen, wo sin(x) >= cos(x)
ax.fill_between(x, y1, y2,
                where=(y1 >= y2),         # Bedingung: füllen, wenn y1 größer als y2 ist
                color='blue', alpha=0.3,
                label='sin ≥ cos')
# Nur füllen, wo sin(x) < cos(x) (mit einer anderen Farbe)
ax.fill_between(x, y1, y2,
                where=(y1 < y2),
                color='red', alpha=0.3,
                label='sin < cos')

ax.set_title('Bedingtes Füllen mit where-Parameter')
ax.set_xlabel('x')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

Beispiel 4: fill_betweenx vertikale Füllung

Beispiel

import matplotlib.pyplot as plt
import numpy as np

# Die Argumentreihenfolge für fill_betweenx ist (y, x1, x2)
y = np.linspace(0, 10, 100)
x1 = 2 + np.sin(y)
x2 = 4 + np.cos(y) * 0.5

fig, ax = plt.subplots(figsize=(6, 6), layout='constrained')

ax.fill_betweenx(y, x1, x2, alpha=0.4, color='coral')
ax.plot(x1, y, 'red', linewidth=1.5, label='x1(y)')
ax.plot(x2, y, 'darkred', linewidth=1.5, label='x2(y)')

ax.set_title('fill_betweenx: Vertikale Füllung')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend()
plt.show()

Häufig gestellte Fragen

Sind die Datenpunkte für den where-Parameter nicht glatt genug?

Wenn die gefüllte Fläche an True/False-Grenzen ungenau ist, setzen Sieinterpolate=TrueEs kann interpolieren, um präzise Grenzen an Schnittpunkten zu berechnen.

Was ist der Unterschied zwischen fill_between und stackplot?

fill_between()Füllt zwischen zwei bestimmten Kurven, geeignet zum Anzeigen von Unterschieden oder Konfidenzintervallen.

stackplot()Stapelt mehrere Kurven Schicht für Schicht von 0 aus, geeignet zum Anzeigen der kumulierten Gesamtsumme jedes Teils.


Matplotlib 参考文档Matplotlib-Referenzdokumentation

Andere Erweiterungen