2012-09-04 5 views
6

Ich bin ein Zeitreihe in Pandas mit matplotlib Plotten und ich versuche, eine Handlung wie folgt aussehen zu färben.Wie hinter einer Funktion im Laufe der Zeit ein Rechteck zeichnen

Illustration on the wanted result

Ich habe die Zeiten für die A-F Punkte. Ich habe versucht,

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

die Position von ihnen in der Handlung zu bekommen mit und endete mit x Positionen um 22'395'850 zu sein (nicht einmal in der Nähe Unix-Zeit: S)

Mein Code im Grunde sieht so aus:

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

Aber nichts von dem Patch zeigt sich. Auch getestet, um die Zeit direkt zu verwenden, lief es tatsächlich aber kein Patch wurde gerendert.

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

Was ist der zugrunde liegende Typ? Wie sollte ich things rechtzeitig in Matplotlib positionieren? Jedes hässliche Arbeiten wird geschätzt.

+1

Sie scheinen X und Y als erstes Argument von Rectangle ((x, y), ...) getauscht zu haben. Rectangle ((22395760, 0), ...) –

+0

omg, es könnte die Lösung sein, teste ich es gerade jetzt, festhalten. – SlimJim

+0

btw plot.axvspan() scheint eine bessere Übereinstimmung für das, was Sie –

Antwort

5

Sie scheinen vertauscht x zu haben und y als erstes Argument von Rectangle ((x, y), ...). Rectangle ((22395760, 0), ...)

Statt mit einem Patch, plot.axvspan() scheint eine bessere Übereinstimmung für das, was Sie tun mögen.

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