Fonction fill_between() / fill_betweenx() de Matplotlib


Matplotlib 参考文档Documentation de référence de Matplotlib

fill_between()Utilisée pour remplir la région entre deux courbes horizontales,fill_betweenx()Remplit la région entre deux courbes verticales.

Souvent utilisée pour visualiser des intervalles de confiance, des plages d'incertitude, des zones de différence, etc.

Définition de fonction

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)

Description du paramètre

ParamètreTypeDescription
x / yarrayPoints de données du premier axe de coordonnées
y1, y2 / x1, x2tableau ou scalaireDeux courbes. Un scalaire représente une ligne constante. y2 vaut 0 par défaut, remplissant jusqu'à l'axe des x.
oùtableau de booléensSpécifie quels intervalles doivent être remplis. True remplit, False ne remplit pas.
interpolateboolSi True, interpole pour calculer des limites précises aux intersections de courbes.
PasstrRemplissage en escalier : 'pre', 'post', 'mid'
color / facecolorcolorCouleur de remplissage
alphafloatTransparence
labelstrLibellé de légende
hatchstrMotifs de remplissage : '/'、'\'、'|'、'-'、'+'、'x'、'*'

fill_between et fill_betweenx renvoient unPolyCollectionobjet, qui peut être utilisé pour des modifications ultérieures ou transmis à colorbar.


Exemples d'utilisation

Exemple 1 : Remplir jusqu'à l'axe des x (y2=0 par défaut)

Exemple

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')

# Tracer la courbe principale
ax.plot(x, y, 'b-', linewidth=2, label='sin(x)')
# Remplir la zone entre la courbe et l’axe des x
ax.fill_between(x, y, alpha=0.3, color='blue',
                label='Aire sous la courbe')

ax.set_title('fill_between: Aire entre la courbe et l’axe des x')
ax.set_xlabel('x')
ax.set_ylabel('sin(x)')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

Exemple 2 : Intervalle de confiance (aire entre deux courbes)

Exemple

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y_mean = np.sin(x) + 5                     # Ligne moyenne
y_std = 0.3 + 0.1 * x                      # L’écart-type augmente avec x

# Bornes supérieure et inférieure
y_upper = y_mean + y_std
y_lower = y_mean - y_std

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

# Remplir l'intervalle de confiance des deux côtés de la moyenne
ax.fill_between(x, y_lower, y_upper,
                alpha=0.3, color='steelblue',
                label='Intervalle de confiance')
# Tracer la ligne de la moyenne
ax.plot(x, y_mean, 'steelblue', linewidth=2, label='Moyenne')
# Tracer les bornes supérieure et inférieure
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('Intervalle de confiance (fill_between)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

Exemple 3 : remplissage conditionnel avec le paramètre where

Exemple

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)')

# Remplir uniquement là où sin(x) >= cos(x)
ax.fill_between(x, y1, y2,
                where=(y1 >= y2),         # Condition : remplir lorsque y1 est supérieur à y2
                color='blue', alpha=0.3,
                label='sin ≥ cos')
# Remplir uniquement là où sin(x) < cos(x) (avec une couleur différente)
ax.fill_between(x, y1, y2,
                where=(y1 < y2),
                color='red', alpha=0.3,
                label='sin < cos')

ax.set_title('Remplissage conditionnel avec le paramètre where')
ax.set_xlabel('x')
ax.legend()
ax.grid(True, alpha=0.3)
plt.show()

Exemple 4 : remplissage vertical avec fill_betweenx

Exemple

import matplotlib.pyplot as plt
import numpy as np

# L'ordre des arguments pour fill_betweenx est (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 : remplissage vertical')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend()
plt.show()

Questions fréquentes

Les points de données pour le paramètre where ne sont pas suffisamment lisses ?

Lorsque la zone remplie est imprécise aux limites True/False, définissezinterpolate=TrueIl peut interpoler pour calculer des limites précises aux points d'intersection.

Quelle est la différence entre fill_between et stackplot ?

fill_between()Remplit entre deux courbes spécifiques, adapté pour montrer des différences ou des intervalles de confiance.

stackplot()Empile plusieurs courbes couche par couche à partir de 0, adapté pour montrer le total cumulé de chaque partie.


Matplotlib 参考文档Documentation de référence de Matplotlib

Autres extensions