Remplir la zone entre les lignes #

Cet exemple montre comment utiliser fill_betweenpour colorer la zone entre deux lignes.

import matplotlib.pyplot as plt
import numpy as np

Utilisation de base #

Les paramètres y1 et y2 peuvent être des scalaires, indiquant une limite horizontale aux valeurs y données. Si seul y1 est donné, y2 est par défaut égal à 0.

x = np.arange(0.0, 2, 0.01)
y1 = np.sin(2 * np.pi * x)
y2 = 0.8 * np.sin(4 * np.pi * x)

fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True, figsize=(6, 6))

ax1.fill_between(x, y1)
ax1.set_title('fill between y1 and 0')

ax2.fill_between(x, y1, 1)
ax2.set_title('fill between y1 and 1')

ax3.fill_between(x, y1, y2)
ax3.set_title('fill between y1 and y2')
ax3.set_xlabel('x')
fig.tight_layout()
remplir entre y1 et 0, remplir entre y1 et 1, remplir entre y1 et y2

Exemple : Bandes de confiance #

Une application courante fill_betweenest l'indication de bandes de confiance.

fill_betweenutilise les couleurs du cycle de couleurs comme couleur de remplissage. Ceux-ci peuvent être un peu forts lorsqu'ils sont appliqués pour remplir des zones. Il est donc souvent conseillé d'éclaircir la couleur en rendant la zone semi-transparente à l'aide d' alpha .

N = 21
x = np.linspace(0, 10, 11)
y = [3.9, 4.4, 10.8, 10.3, 11.2, 13.1, 14.1,  9.9, 13.9, 15.1, 12.5]

# fit a linear curve an estimate its y-values and their error.
a, b = np.polyfit(x, y, deg=1)
y_est = a * x + b
y_err = x.std() * np.sqrt(1/len(x) +
                          (x - x.mean())**2 / np.sum((x - x.mean())**2))

fig, ax = plt.subplots()
ax.plot(x, y_est, '-')
ax.fill_between(x, y_est - y_err, y_est + y_err, alpha=0.2)
ax.plot(x, y, 'o', color='tab:brown')
remplir entre démo
[<matplotlib.lines.Line2D object at 0x7f2d0108d030>]

Remplissage sélectif des régions horizontales #

Le paramètre permet de spécifier les plages x à remplir. C'est un tableau booléen de la même taille que x .

Seules les plages x de séquences True contiguës sont remplies. Par conséquent, la plage entre les valeurs True et False voisines n'est jamais remplie. Ceci est souvent indésirable lorsque les points de données doivent représenter une quantité contiguë. Il est donc recommandé de régler à interpolate=Truemoins que la distance x des points de données soit suffisamment fine pour que l'effet ci-dessus ne soit pas perceptible. L'interpolation se rapproche de la position x réelle à laquelle la condition changera et étend le remplissage jusqu'à là.

x = np.array([0, 1, 2, 3])
y1 = np.array([0.8, 0.8, 0.2, 0.2])
y2 = np.array([0, 0, 1, 1])

fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)

ax1.set_title('interpolation=False')
ax1.plot(x, y1, 'o--')
ax1.plot(x, y2, 'o--')
ax1.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3)
ax1.fill_between(x, y1, y2, where=(y1 < y2), color='C1', alpha=0.3)

ax2.set_title('interpolation=True')
ax2.plot(x, y1, 'o--')
ax2.plot(x, y2, 'o--')
ax2.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3,
                 interpolate=True)
ax2.fill_between(x, y1, y2, where=(y1 <= y2), color='C1', alpha=0.3,
                 interpolate=True)
fig.tight_layout()
interpolation=Faux, interpolation=Vrai

Noter

Des écarts similaires se produiront si y1 ou y2 sont des tableaux masqués. Étant donné que les valeurs manquantes ne peuvent pas être approximées, l' interpolation n'a aucun effet dans ce cas. Les écarts autour des valeurs masquées ne peuvent être réduits qu'en ajoutant plus de points de données à proximité des valeurs masquées.

Marquage sélectif des régions horizontales sur l'ensemble des axes #

Le même mécanisme de sélection peut être appliqué pour remplir toute la hauteur verticale des axes. Pour être indépendant des limites y, nous ajoutons une transformation qui interprète les valeurs x en coordonnées de données et les valeurs y en coordonnées d'axes.

L'exemple suivant marque les régions dans lesquelles les données y sont supérieures à un seuil donné.

fig, ax = plt.subplots()
x = np.arange(0, 4 * np.pi, 0.01)
y = np.sin(x)
ax.plot(x, y, color='black')

threshold = 0.75
ax.axhline(threshold, color='green', lw=2, alpha=0.7)
ax.fill_between(x, 0, 1, where=y > threshold,
                color='green', alpha=0.5, transform=ax.get_xaxis_transform())
remplir entre démo
<matplotlib.collections.PolyCollection object at 0x7f2d00e640a0>

Références

L'utilisation des fonctions, méthodes, classes et modules suivants est illustrée dans cet exemple :

Durée totale d'exécution du script : (0 minutes 1,875 secondes)

Galerie générée par Sphinx-Gallery