123 votes

Tracer différents DataFrames dans la même figure

J'ai un fichier de température avec des enregistrements de température sur 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 des X va de janvier à décembre, l'axe des Y est la température. Comment dois-je m'y prendre ?

387voto

Chang She Points 14802

Essayez :

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

38voto

Hamish Robertson Points 303

Si vous utilisez le carnet de notes Jupyter/Ipython et que vous rencontrez des problèmes pour utiliser.. ;

ax = df1.plot()

df2.plot(ax=ax)

Exécutez la commande à l'intérieur de la même cellule ! Pour une raison quelconque, cela ne fonctionne pas lorsqu'ils sont séparés en cellules séquentielles. Pour moi en tout cas.

34voto

Andy Hayden Points 38010

Bien que la réponse de Chang explique comment tracer plusieurs fois sur la même figure, il serait préférable dans ce cas d'utiliser un groupby y unstack ing :

(En supposant que vous l'avez dans le cadre de données, avec l'index de date déjà)

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

Il est maintenant facile de tracer un graphique (chaque année étant une ligne distincte) :

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

6voto

adivis12 Points 270

Pour faire cela pour plusieurs cadres de données, vous pouvez faire 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)

2voto

konse Points 151

Pour compléter la réponse de @adivis12, vous n'avez pas besoin de faire le if déclaration. Mettez-le comme ça :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X