Remplir entre deux lignes verticales dans matplotlib

95

J'ai parcouru les exemples de la matplotlibdocumentation, mais je ne savais pas comment créer un tracé qui remplit la zone entre deux lignes verticales spécifiques.

Par exemple, disons que je veux créer un tracé entre x=0.2et x=4(pour la ygamme complète du tracé). Dois-je utiliser fill_between, fillou fill_betweenx?

Puis-je utiliser la wherecondition pour cela?

Amelio Vazquez-Reina
la source

Réponses:

190

Cela ressemble à ce que vous voulez axvspan, plutôt que l'un des remplissages entre les fonctions. La différence est que axvspan(et axhspan) remplira toute l'étendue y (ou x) du tracé, quelle que soit la façon dont vous zoomez.

Par exemple, utilisons axvspanpour mettre en évidence la région x entre 8 et 14:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, alpha=0.5, color='red')

plt.show()

entrez la description de l'image ici

Vous pouvez utiliser fill_betweenxpour faire cela, mais les étendues (x et y) du rectangle seraient en coordonnées de données . Avec axvspan, les étendues y du rectangle par défaut à 0 et 1 et sont exprimées en coordonnées d'axes (en d'autres termes, des pourcentages de la hauteur du tracé).

Pour illustrer cela, faisons en sorte que le rectangle s'étende de 10% à 90% de la hauteur (au lieu de prendre toute l'étendue). Essayez de zoomer ou de faire un panoramique, et notez que les étendues y indiquent fixe dans l'espace d'affichage, tandis que les étendues x se déplacent avec le zoom / panoramique:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, ymin=0.1, ymax=0.9, alpha=0.5, color='red')

plt.show()

entrez la description de l'image ici

Joe Kington
la source
3
les gens qui sont intéressés par une solution à utiliser fill_betweenpour des lignes verticales plus "ondulées", jetez un œil au transformparamètre (et à cette réponse )
Mr Tsjolder