Fonction fill_between() / fill_betweenx() de 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ètre | Type | Description |
|---|---|---|
| x / y | array | Points de données du premier axe de coordonnées |
| y1, y2 / x1, x2 | tableau ou scalaire | Deux courbes. Un scalaire représente une ligne constante. y2 vaut 0 par défaut, remplissant jusqu'à l'axe des x. |
| où | tableau de booléens | Spécifie quels intervalles doivent être remplis. True remplit, False ne remplit pas. |
| interpolate | bool | Si True, interpole pour calculer des limites précises aux intersections de courbes. |
| Pas | str | Remplissage en escalier : 'pre', 'post', 'mid' |
| color / facecolor | color | Couleur de remplissage |
| alpha | float | Transparence |
| label | str | Libellé de légende |
| hatch | str | Motifs de remplissage : '/'、'\'、'|'、'-'、'+'、'x'、'*' |
fill_between et fill_betweenx renvoient un
PolyCollectionobjet, 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 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 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 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 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.
Autres extensions