web-dev-qa-db-fra.com

Tracer différents DataFrames dans la même figure

J'ai un fichier de température avec des enregistrements de température de nombreuses 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 numéros différents, l'heure des enregistrements, donc les pandas datetimeindices sont tous différents.

Je veux tracer les données de l'année différente dans le même chiffre pour la comparaison. L'axe des X est compris entre janvier et décembre, l'axe des Y est la température. Comment devrais-je m'y prendre?

77
wuwucat

Bien que la réponse de Chang explique comment tracer plusieurs fois le même chiffre sur le même graphique, dans ce cas, il serait peut-être préférable d'utiliser un groupby et unstack ing:

(En supposant que cela se trouve dans le cadre de données, avec déjà l'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 séparée):

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

Essayer:

ax = df1.plot()
df2.plot(ax=ax)
285
Chang She

Si vous utilisez un bloc-notes Jupyter/Ipython en cours d’exécution et que vous rencontrez des problèmes d’utilisation;

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, quand ils sont séparés en cellules séquentielles. Pour moi au moins.

15
Hamish Robertson

Pour ce faire pour plusieurs images, vous pouvez effectuer une boucle for sur elles:

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)
3
adivis12