Matplotlib Fill Between et Alpha

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

En visualisation de données, il est parfois nécessaire de souligner certaines zones ou plages sur un graphique. La fonction fill_between de Matplotlib est un outil pratique pour générer une région ombrée entre une limite minimale et maximale. Elle peut également être utilisée pour améliorer l'apparence visuelle d'un graphique. L'argument alpha peut être utilisé pour ajuster la transparence de la région ombrée. Ce laboratoire vous guidera à travers plusieurs exemples d'utilisation de fill_between et alpha dans Matplotlib pour créer des graphiques plus visuellement attrayants et informatifs.

Conseils sur la VM

Une fois le démarrage de la VM terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limites de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.

Amélioration d'un graphique en ligne avec fill_between

Le premier exemple montre comment améliorer un graphique en ligne avec fill_between. Nous utiliserons des données financières de Google pour créer deux sous-graphiques, l'un avec un simple graphique en ligne et l'autre avec un graphique en ligne rempli.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cbook as cbook

## chargez quelques données financières d'échantillonnage
r = cbook.get_sample_data('goog.npz')['price_data'].view(np.recarray)

## créez deux sous-graphiques avec les axes x et y partagés
fig, (ax1, ax2) = plt.subplots(1, 2, sharex=True, sharey=True)

pricemin = r.close.min()

ax1.plot(r.date, r.close, lw=2)
ax2.fill_between(r.date, pricemin, r.close, alpha=0.7)

for ax in ax1, ax2:
    ax.grid(True)
    ax.label_outer()

ax1.set_ylabel('prix')
fig.suptitle('Prix de clôture quotidien de Google (GOOG)')
fig.autofmt_xdate()

Utilisation de alpha pour atténuer les couleurs

L'argument alpha peut également être utilisé pour atténuer les couleurs pour des graphiques plus visuellement attrayants. Dans l'exemple suivant, nous allons calculer deux populations de marcheurs aléatoires avec une moyenne et une écart-type différentes des distributions normales à partir desquelles les pas sont tirés. Nous utilisons des régions remplies pour tracer +/- une écart-type de la position moyenne de la population.

## Fixing random state for reproducibility
np.random.seed(19680801)

Nsteps, Nwalkers = 100, 250
t = np.arange(Nsteps)

## an (Nsteps x Nwalkers) array of random walk steps
S1 = 0.004 + 0.02*np.random.randn(Nsteps, Nwalkers)
S2 = 0.002 + 0.01*np.random.randn(Nsteps, Nwalkers)

## an (Nsteps x Nwalkers) array of random walker positions
X1 = S1.cumsum(axis=0)
X2 = S2.cumsum(axis=0)

## Nsteps length arrays empirical means and standard deviations of both
## populations over time
mu1 = X1.mean(axis=1)
sigma1 = X1.std(axis=1)
mu2 = X2.mean(axis=1)
sigma2 = X2.std(axis=1)

## plot it!
fig, ax = plt.subplots(1)
ax.plot(t, mu1, lw=2, label='moyenne population 1')
ax.plot(t, mu2, lw=2, label='moyenne population 2')
ax.fill_between(t, mu1+sigma1, mu1-sigma1, facecolor='C0', alpha=0.4)
ax.fill_between(t, mu2+sigma2, mu2-sigma2, facecolor='C1', alpha=0.4)
ax.set_title(r'marcheurs aléatoires $\mu$ empirique et intervalle $\pm \sigma$')
ax.legend(loc='upper left')
ax.set_xlabel('numéro de pas')
ax.set_ylabel('position')
ax.grid()

Mise en évidence de certaines régions avec where

L'argument clé where est très pratique pour mettre en évidence certaines régions du graphique. where prend un masque booléen de la même longueur que les arguments x, ymin et ymax, et ne remplit que la région où le masque booléen est True. Dans l'exemple ci-dessous, nous simulons un seul marcheur aléatoire et calculons la moyenne analytique et l'écart-type des positions de la population. La moyenne de la population est représentée par la ligne pointillée, et l'écart de plus ou moins un écart-type par rapport à la moyenne est représenté par la région remplie. Nous utilisons le masque where X > upper_bound pour trouver la région où le marcheur est en dehors de la limite d'un écart-type, et nous colorons cette région en rouge.

## Fixing random state for reproducibility
np.random.seed(1)

Nsteps = 500
t = np.arange(Nsteps)

mu = 0.002
sigma = 0.01

## les pas et la position
S = mu + sigma*np.random.randn(Nsteps)
X = S.cumsum()

## les bornes analytiques inférieure et supérieure de la population d'un écart-type
lower_bound = mu*t - sigma*np.sqrt(t)
upper_bound = mu*t + sigma*np.sqrt(t)

fig, ax = plt.subplots(1)
ax.plot(t, X, lw=2, label='position du marcheur')
ax.plot(t, mu*t, lw=1, label='moyenne de la population', color='C0', ls='--')
ax.fill_between(t, lower_bound, upper_bound, facecolor='C0', alpha=0.4,
                label='plage d\'un écart-type')
ax.legend(loc='upper left')

## ici, nous utilisons l'argument where pour ne remplir que la région où le
## marcheur est au-dessus de la limite d'un écart-type de la population
ax.fill_between(t, upper_bound, X, where=X > upper_bound, fc='red', alpha=0.4)
ax.fill_between(t, lower_bound, X, where=X < lower_bound, fc='red', alpha=0.4)
ax.set_xlabel('numéro de pas')
ax.set_ylabel('position')
ax.grid()

Mise en évidence de plages d'un axe avec axhspan et axvspan

Un autre usage pratique des régions remplies est de mettre en évidence des plages horizontales ou verticales d'un axe. Pour cela, Matplotlib dispose des fonctions d'aide axhspan et axvspan. Consultez la galerie axhspan_demo pour plus d'informations.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.axhspan(0.25, 0.75, facecolor='0.5', alpha=0.5)
ax.axvspan(6, 7, facecolor='r', alpha=0.5)

plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser la fonction fill_between et l'argument alpha dans Matplotlib pour créer des graphiques plus visuellement attrayants et informatifs. Nous avons présenté plusieurs exemples d'utilisation de fill_between et alpha pour mettre en évidence certaines régions ou plages d'un graphique. Nous avons également brièvement introduit les fonctions axhspan et axvspan pour mettre en évidence des plages d'un axe.