Zeichnen Sie verschiedene DataFrames in derselben Abbildung


92

Ich habe eine Temperaturdatei mit langjährigen Temperaturaufzeichnungen in einem Format wie folgt:

2012-04-12,16:13:09,20.6
2012-04-12,17:13:09,20.9
2012-04-12,18:13:09,20.6
2007-05-12,19:13:09,5.4
2007-05-12,20:13:09,20.6
2007-05-12,20:13:09,20.6
2005-08-11,11:13:09,20.6
2005-08-11,11:13:09,17.5
2005-08-13,07:13:09,20.6
2006-04-13,01:13:09,20.6

Jedes Jahr hat eine andere Anzahl, Uhrzeit der Aufzeichnungen, daher sind die Datums- / Uhrzeitindizes der Pandas alle unterschiedlich.

Ich möchte die Daten des verschiedenen Jahres zum Vergleich in derselben Abbildung darstellen. Die X-Achse ist Jan bis Dec, die Y-Achse ist die Temperatur. Wie soll ich das machen?

Antworten:


30

Obwohl Changs Antwort erklärt, wie man mehrere Male auf derselben Figur plottet, ist es in diesem Fall möglicherweise besser, wenn Sie a groupbyund unstacking verwenden:

(Angenommen, Sie haben dies im Datenrahmen, mit Datetime-Index bereits)

In [1]: df
Out[1]:
            value  
datetime                         
2010-01-01      1  
2010-02-01      1  
2009-01-01      1  

# create additional month and year columns for convenience
df['Month'] = map(lambda x: x.month, df.index)
df['Year'] = map(lambda x: x.year, df.index)    

In [5]: df.groupby(['Month','Year']).mean().unstack()
Out[5]:
       value      
Year    2009  2010
Month             
1          1     1
2        NaN     1

Jetzt ist es einfach zu zeichnen (jedes Jahr als separate Linie):

df.groupby(['Month','Year']).mean().unstack().plot()

338

Versuchen:

ax = df1.plot()
df2.plot(ax=ax)

1
Wenn es sich um ein iPhone-Notebook handelt, wie kann es erreicht werden? Gibt es eine Halte- oder Anzeigefunktion, die das Diagramm erst druckt, nachdem alle Einstellungen vorgenommen wurden?
Diansheng

1
Set , %matplotlib inlinewo Sie Ihre Importe tun , damit Ihre Visualisierungen innerhalb ipython Notebooks erscheinen.
Hassan Baig

1
Gibt es einen Hinweis darauf, wie dies funktionieren würde, wenn mehr als 3 Datenrahmen vorhanden wären?
RPT

Das ist großartig. Ich werde antworten, wie man mit mehr als 3 dfs umgeht
adivis12

3
Sind Sie sicher, dass dies für jede Art von plot()Spezifikation plotfunktioniert , und zwar immer dann, wenn irgendeine Art von Spezifikation als Argument an die Funktion übergeben wird?
Gented

26

Wenn Sie ein laufendes Jupyter / Ipython-Notebook haben und Probleme bei der Verwendung haben;

ax = df1.plot()

df2.plot(ax=ax)

Führen Sie den Befehl in derselben Zelle aus !! Aus irgendeinem Grund funktioniert es nicht, wenn sie in aufeinanderfolgende Zellen aufgeteilt werden. Für mich zumindest.


6

Um dies für mehrere Datenrahmen zu tun, können Sie eine for-Schleife über diese ausführen:

fig = plt.figure(num=None, figsize=(10, 8))
ax = dict_of_dfs['FOO'].column.plot()
for BAR in dict_of_dfs.keys():
    if BAR == 'FOO':
        pass
    else:
        dict_of_dfs[BAR].column.plot(ax=ax)

0

Nur um die Antwort von @ adivis12 zu verbessern, müssen Sie die ifAnweisung nicht ausführen . Sagen Sie es so:

fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
    dict_of_dfs[BAR].plot(ax=ax)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.