2017-11-06 1 views
-1

Ich bin ein Anfänger in Python und ich versuche, horizontale Linien der jährlichen Mittelwerte einer Pandas-Zeitreihe mit der Form von (12,) zu zeichnen, die 12 Jahre anzeigend. Ich habe dies versucht:Horizontale Linien in eine for-Schleife mit Pandas-Daten plotten?

plt.figure() 
j=0 
for i in range(0,np.shape(df_year)[0]): 
    plt.axhline(periodData_yearAvg[i],xmin=j,xmax=j+1) 
    print j 
    print periodData_yearAvg[i] 
    j=j+1 

Doch was ich bekommen, ist eine horizontale Linie von 0 bis 1 nur mit dem ersten Element der Pandas Serie.

Ich weiß, dass zum Beispiel in MATLAB haben "Halt" Befehl, der den neuen Wert in der gleichen Handlung plottet. Gibt es in Python die gleiche Option?

+0

Sie sollten beenden stellen Sie immer ein [mcve] des Problems zur Verfügung. Wenn man sich den Code anschaut, sollte man in der Tat so viele Zeilen bekommen wie Zeilen in 'df_year', aber da wir kein [mcve] haben, können wir dir nicht helfen. – ImportanceOfBeingErnest

+0

Zitat aus der Doc-Zeichenkette _ "xmin: Skalar, optional, Standard: 0 Sollte zwischen 0 und 1 liegen, wobei 0 ganz links im Diagramm ist, 1 die ganz rechts im Diagramm." otoh Sie verwenden Intervalle außerhalb des Diagrammbereichs für alle horizontalen Linien außer der ersten ... versuchen Sie 'xmin = j/12, xmax = (j + 1/12)' – gboffi

+0

Vielen Dank für Ihren Beitrag. Jetzt habe ich eine andere Grafik, aber immer noch nicht das, wonach ich gesucht habe. Ich benutze Explorer und ich kann die Option zum Anhängen einer Figur nicht sehen. Aber ich erkläre die Figur: jetzt ist die x-Achse immer noch zwischen 0 und 1, und ich habe 12 horizontale Linien zwischen 0 und 1, auf ihren angegebenen y-Werten. –

Antwort

0

Wie ich in einem Kommentar sagte, Sie scheinbar die Semantik von xmin, xmax, die Brüche 0≤x≤1 der X-Achse sein sollte missverstanden.

Der richtige Weg, sie zu nutzen, in Ihrem speziellen Anwendungsfall ist

In [42]: N, n = 12, 12.0 # an integer and a float, so it works also in Python 2 
In [43]: data = np.random.randint(50, 80, N) 
In [44]: for j in range(N): 
    ...:  k = j+1 
    ...:  plt.axhline(data[j], xmin=j/n, xmax=k/n) 

ein besseres Aussehen haben Sie mit

In [45]: plt.xlim((2016-N,2016)); 
In [46]: plt.xticks(np.linspace(2016-N, 2016, N+1)); 
In [47]: plt.grid(); # of course gridding is optional 
In [48]: 

zu erhalten enter image description here

+0

Lieber gboffi, nochmals vielen Dank für deine Erklärung. Ich kopiere deinen Code und noch immer den gleichen Graph mit nur einer horizontalen Linie von 2004 bis 2016 mit einem Wert zwischen 60 und 65. Ich denke, es gibt ein Problem mit meinem Plotpy mit ssh. –

+1

Welche Version von Python verwenden Sie? in Python3 '3/12 == 0.25', weil die Division immer Fließkommazahlen liefert, aber in Python2' 3/12 == 0', weil es als Integer-Division interpretiert wird. Ich bin ein Idiot ... Aus deinen 'print'-Aussagen geht hervor, dass du Python2 benutzt! Bitte benutzen Sie 'plt.axhline (Daten [j], xmin = j/12.0. Xmax = k/12.0)' und jedes Bit wird seinen Platz finden ... (keine '12' ist ein Integer-Literal aber' 12.0' das ist ein Fließkomma-Literal). Es tut mir leid für mein Missverständnis. Danke, dass Sie die Antwort auf einen Akt des Glaubens angenommen haben! – gboffi

+1

Ja Ja, vielen Dank. Es ist jetzt das gleiche wie du es hier schreibst. –

Verwandte Themen