2012-09-04 13 views
6

Sto plottando un timeseries in panda usando matplotlib e sto cercando di colorare un aspetto grafico come questo.Come tracciare un rettangolo dietro una funzione nel tempo

Illustration on the wanted result

ho il tempo per i punti A-F. Ho cercato di ottenere la posizione di loro nella trama usando

gcf().canvas.mpl_connect('button_press_event', debug_print_onclick_event) 

e si è conclusa con le posizioni x essendo intorno 22'395'850 (nemmeno vicino a unixtime: S)

Il mio codice in fondo assomiglia a questo:

plot = data.plot(legend=False) #where data is the timeseries (pandas.DataFrame). 
plot.add_patch(
    plt.Rectangle(
     (0,22395760), 
     60, 
     45, 
     facecolor='green', 
     edgecolor='green' 
    ) 
) 
plt.draw() 
plt.show() 

Ma non viene visualizzato nulla della patch. Testato anche per utilizzare direttamente il tempo, in realtà è stato eseguito ma non è stata eseguita alcuna correzione.

plt.Rectangle(
    (0,datetime_D), 
    60, 
    4*pandas.datetools.Minutes(15), 
    facecolor='green', 
    edgecolor='green' 
) 

Qual è il tipo sottostante? Come dovrei posizionare things in tempo in matplotlib? È apprezzato qualsiasi brutto lavoro.

+1

Sembra che tu abbia scambiato x e y come primo argomento di Rettangolo ((x, y), ...). Rectangle ((22395760, 0), ...) –

+0

omg, potrebbe essere la soluzione, lo sto testando proprio ora, aspetta. – SlimJim

+0

btw plot.axvspan() sembra una corrispondenza migliore per quello che vuoi fare –

risposta

5

Sembra che tu abbia scambiato x e y come primo argomento di Rettangolo ((x, y), ...). Rettangolo ((22395760, 0), ...)

Invece di utilizzare una patch, plot.axvspan() sembra una corrispondenza migliore per ciò che si desidera fare.

plt.gca().axvspan(date,date+2*pandas.datetools.Minute(15),facecolor='green',edge‌ color='green',alpha=0.3) 
Problemi correlati