2013-10-16 66 views
8

我想用matplotlib繪製一個熊貓時間序列對象data。對於簡單的折線圖data.plot(),我可以用ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d %H:%M:%S'))成功更改x軸日期格式。無法調整熊貓條形圖中的x軸DateFormat

但是,我不能爲條形圖data.plot(kind='bar')做同樣的事情。圖表不會出現。有沒有辦法改變熊貓條形圖的數據格式?我知道我可以用plt.bar方法創建一個圖表,但是我需要使用熊貓疊加的條形圖來獲取更復雜的數據。

import matplotlib.pyplot as plt 
import matplotlib.dates as md 
import numpy as np 
import pandas as pd 
import datetime as dt 
import time 

n=20 
duration=1000 
now=time.mktime(time.localtime()) 
timestamps=np.linspace(now,now+duration,n) 
dates=[dt.datetime.fromtimestamp(ts) for ts in timestamps] 
values=np.sin((timestamps-now)/duration*2*np.pi) 
data=pd.Series(values, index=dates) 

fig=figure(figsize(5,5)) 
ax=fig.add_subplot(111) 
data.plot(kind='bar') 
ax.xaxis.set_major_formatter(md.DateFormatter('%Y-%m-%d %H:%M:%S')) 

回答

17

由於熊貓只是使用matplotlib可以當然創建具有matplotlib相同的(堆疊的)條形圖。沒有理由爲什麼你只能使用熊貓。

它在這種情況下不會幫助。 Matplotlib的bar()將xvalues從日期更改爲浮動,因此DateFormatter不再有效。您可以使用ax.get_xticks()來檢查xticks。

我看不出你如何能在xticks日期,但你可以自己重寫xticklabels:

ax.set_xticklabels([dt.strftime('%Y-%m-%d %H:%M:%S') for dt in data.index.to_pydatetime()]) 
+0

謝謝。我發現使用'ax.set_xticklabels'即使是熊貓的情節也是如此。 – KLI

+0

這似乎不適用於已由'groupby'分組的熊貓DataFrame:'AttributeError:'MultiIndex'對象沒有屬性'to_pydatetime' – mjp

0

如果您分組使用groupby您的數據,那麼你可以做同樣的事情上面使用的答案:

new_ticks = [] 
for dt in data.index: 
    new_ticks.append(datetime.datetime(dt[0],dt[1],1)) 
ax.set_xticklabels([dt.strftime('%Y-%m') for dt in new_ticks]) 

煤礦有人總結,並通過分組每月所以index元組只有(2009,4)例如。顯然,如果你有更多方面的元組(即日,小時),那麼你會將它們添加到日期時間函數