2011-11-25 13 views
23

Sto facendo una visualizzazione dei dati di borsa storici per un progetto, e mi piacerebbe evidenziare le regioni di gocce. Ad esempio, quando il titolo sta registrando un drawdown significativo, vorrei evidenziarlo con una regione rossa.In un grafico matplotlib, posso evidenziare intervalli di valori x specifici?

Posso farlo automaticamente o dovrò disegnare un rettangolo o qualcosa del genere?

+0

Si potrebbe tracciare automaticamente un rettangolo ... avete già i valori x che definiscono l'avvio/arresto della regione per-essere-in evidenza? Se è così, puoi disegnare una patch Rettangolo per evidenziare quella sezione (fammi sapere se hai bisogno di un esempio!) – Daan

risposta

45

Dai un'occhiata a axvspan (e axhspan per evidenziare una regione dell'asse 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

Se stai usando date, allora avrete bisogno di convertire i tuoi min e max valori x per matplotlib date. Utilizzare matplotlib.dates.date2num per gli oggetti datetime o matplotlib.dates.datestr2num per vari timestamp di stringa.

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

+0

Sto usando le date per il mio asse x, e ho problemi a farlo funzionare. Qualche consiglio? – Alex

+0

Vedi la modifica. Dovrai convertire le tue date nel formato di data interno di matplotlib (è solo un numero in virgola mobile, dove un intervallo di 1 corrisponde a 1 giorno.) Dai un'occhiata a 'matplotlib.dates' per le varie funzioni per far fronte a questo. Spero possa aiutare! –

+0

Questo può essere fatto in una trama 3D? Vorrei evidenziare il piano XY per una porzione specifica lungo l'asse z. – Kartik

Problemi correlati