Tracez différents DataFrames dans la même figure

92

J'ai un fichier de température avec des enregistrements de température de plusieurs années, dans un format comme ci-dessous:

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

Chaque année a des nombres différents, l'heure des enregistrements, donc les pandas datetimeindices sont tous différents.

Je veux tracer les données des différentes années dans la même figure pour les comparer. L'axe X est de janvier à décembre, l'axe Y est la température. Comment dois-je procéder?

wuwucat
la source

Réponses:

30

Bien que la réponse de Chang explique comment tracer plusieurs fois sur la même figure, dans ce cas, vous pourriez être mieux dans ce cas en utilisant a groupbyet unstacking:

(En supposant que vous l'ayez dans dataframe, avec déjà un index datetime)

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

Maintenant, il est facile de tracer (chaque année sur une ligne distincte):

df.groupby(['Month','Year']).mean().unstack().plot()
Andy Hayden
la source
338

Essayer:

ax = df1.plot()
df2.plot(ax=ax)
Chang elle
la source
1
si c'est sur un notebook ipython, comment y parvenir? existe-t-il une fonction de maintien ou d'affichage qui n'imprime le graphique qu'une fois tous les paramètres définis?
Diansheng
1
Définissez %matplotlib inlineoù vous effectuez vos importations afin que vos visualisations apparaissent dans les blocs-notes iPython.
Hassan Baig
1
Avez-vous une idée de la façon dont cela fonctionnerait s'il y avait plus de 3 dataframes?
RPT
Ceci est incroyable. Je vais vous répondre pour savoir comment faire avec plus de 3 dfs
adivis12
3
Êtes-vous sûr que cela fonctionne pour n'importe quel type de plot(), à savoir chaque fois qu'un type de spécifications est passé en argument dans la plotfonction?
gented
26

Si vous utilisez un notebook Jupyter / Ipython et rencontrez des problèmes lors de l'utilisation de;

ax = df1.plot()

df2.plot(ax=ax)

Exécutez la commande à l'intérieur de la même cellule !! Cela ne fonctionnera pas, pour une raison quelconque, lorsqu'ils sont séparés en cellules séquentielles. Pour moi du moins.

Hamish Robertson
la source
6

Pour ce faire pour plusieurs dataframes, vous pouvez effectuer une boucle for sur eux:

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)
adivis12
la source
0

Juste pour améliorer la réponse @ adivis12, vous n'avez pas besoin de faire la ifdéclaration. Mettez-le comme ceci:

fig, ax = plt.subplots()
for BAR in dict_of_dfs.keys():
    dict_of_dfs[BAR].plot(ax=ax)
Konse
la source