web-dev-qa-db-fra.com

Dans un tracé matplotlib, puis-je mettre en évidence des plages de valeurs x spécifiques?

Je fais une visualisation des données de stock historiques pour un projet, et je voudrais mettre en évidence les régions de gouttes. Par exemple, lorsque le titre connaît une baisse importante, je voudrais le mettre en évidence avec une zone rouge.

Puis-je le faire automatiquement ou dois-je dessiner un rectangle ou quelque chose?

40
Alex

Jetez un oeil à axvspan (et axhspan pour mettre en évidence une région de l'axe des y).

import matplotlib.pyplot as plt

plt.plot(range(10))
plt.axvspan(3, 6, color='red', alpha=0.5)
plt.show()

enter image description here

Si vous utilisez des dates, vous devrez convertir vos valeurs min et max x en dates matplotlib. Utilisation matplotlib.dates.date2num pour datetime objets ou matplotlib.dates.datestr2num pour différents horodatages de chaîne.

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime as dt

t = mdates.drange(dt.datetime(2011, 10, 15), dt.datetime(2011, 11, 27),
                  dt.timedelta(hours=2))
y = np.sin(t)

fig, ax = plt.subplots()
ax.plot_date(t, y, 'b-')
ax.axvspan(*mdates.datestr2num(['10/27/2011', '11/2/2011']), color='red', alpha=0.5)
fig.autofmt_xdate()
plt.show()

enter image description here

73
Joe Kington