Rellenar entre dos líneas verticales en matplotlib

95

Revisé los ejemplos en la matplotlibdocumentación, pero no me quedó claro cómo puedo hacer un diagrama que llene el área entre dos líneas verticales específicas.

Por ejemplo, digamos que quiero crear un gráfico entre x=0.2y x=4(para el yrango completo del gráfico). ¿Debo usar fill_between, fillo fill_betweenx?

¿Puedo usar la wherecondición para esto?

Amelio Vázquez-Reina
fuente

Respuestas:

191

Suena como si lo deseara axvspan, en lugar de uno de los rellenos entre funciones. La diferencia es que axvspan(y axhspan) llenará toda la extensión y (ox) del gráfico independientemente de cómo se amplíe.

Por ejemplo, usemos axvspanpara resaltar la región x entre 8 y 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()

ingrese la descripción de la imagen aquí

Podría usar fill_betweenxpara hacer esto, pero las extensiones (tanto x como y) del rectángulo estarían en coordenadas de datos . Con axvspan, las extensiones y del rectángulo se establecen por defecto en 0 y 1 y están en coordenadas de ejes (en otras palabras, porcentajes de la altura del gráfico).

Para ilustrar esto, hagamos que el rectángulo se extienda del 10% al 90% de la altura (en lugar de ocupar toda la extensión). Intente hacer zoom o paneo, y observe que las extensiones y dicen fijo en el espacio de visualización, mientras que las extensiones x se mueven con el zoom / pan:

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

ingrese la descripción de la imagen aquí

Joe Kington
fuente
3
las personas que estén interesadas en una solución para usar fill_betweenpara líneas verticales más "onduladas", transform
echen