Traccia DataFrame diversi nella stessa figura


92

Ho un file di temperatura con record di temperatura di molti anni, in un formato come di seguito:

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

Ogni anno ha numeri e orari dei record diversi, quindi gli indici di data e ora dei panda sono tutti diversi.

Voglio tracciare i dati dell'anno diverso nella stessa figura per il confronto. L'asse X è da gennaio a dicembre, l'asse Y è la temperatura. Come dovrei fare per farlo?

Risposte:


30

Sebbene la risposta di Chang spieghi come tracciare più volte sulla stessa figura, in questo caso potresti stare meglio usando a groupbye unstacking:

(Supponendo che tu abbia questo in dataframe, con l'indice datetime già)

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

Ora è facile tracciare (ogni anno come una riga separata):

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

338

Provare:

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

1
se è su notebook ipython, come ottenerlo? c'è una funzione di attesa o mostra che stampa il grafico solo dopo che tutte le impostazioni sono state impostate?
Diansheng

1
Imposta la posizione in %matplotlib inlinecui eseguire le importazioni in modo che le visualizzazioni vengano visualizzate nei taccuini iPython.
Hassan Baig

1
Qualche indizio su come funzionerebbe è che c'erano più di 3 dataframe?
RPT

Questo è fantastico. Risponderò per come fare con più di 3 dfs
adivis12

3
Sei sicuro che funzioni per qualsiasi tipo di plot(), vale a dire ogni volta che un qualsiasi tipo di specifica viene passato come argomento nella plotfunzione?
gented

26

Se hai un notebook Jupyter / Ipython in esecuzione e hai problemi a usare;

ax = df1.plot()

df2.plot(ax=ax)

Esegui il comando all'interno della stessa cella !! Per qualche ragione, non funzionerà quando sono separati in celle sequenziali. Almeno per me.


6

Per fare ciò per più dataframe, puoi eseguire un ciclo for su di essi:

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

Solo per migliorare la risposta di @ adivis12, non è necessario fare la ifdichiarazione. Mettilo così:

fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
    dict_of_dfs[BAR].plot(ax=ax)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.