2012-12-14 33 views
46

我有多年的溫度記錄的溫度文件的格式如下:情節在同一圖中不同DataFrames

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 

每年都有不同數量的記錄時間,所以熊貓datetimeindices是全部不同。

我想在同一圖中繪製不同年份的數據進行比較。 X軸是Jan到Dec,Y軸是溫度。我應該如何去做這件事?

回答

19

雖然張的回答解釋瞭如何繪製多次對同一人物,在這種情況下,你可能會在這種情況下使用groupbyunstack ING更好:

(假設你在數據幀中有這個日期時間索引)

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 

現在,它很容易(每年作爲一個單獨的線)繪製:

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

嘗試:

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

你應該做一個博客張貼這一點。對於初學者來說,這是一個非常重要的事實。謝謝你的回答,它使我擺脫了很多痛苦。 –

+1

如果是在ipython筆記本上,該如何實現呢?是否有一個保持或顯示功能,只有在設置了所有設置後纔打印圖形? – Sean

+1

設置「%matplotlib inline」,您可以在其中進行導入,以便可視化顯示在iPython筆記本中。 –

4

如果你正在運行的Jupyter/IPython的筆記本電腦,並使用有問題;

ax = df1.plot()

df2.plot(ax=ax)

運行同一小區內的命令!!由於某種原因,它們在分離成順序單元時不會工作。至少對我來說。

1

爲此多dataframes,您可以循環在他們做了:

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)