2013-10-16 14 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はもう動作しません。 xticksはax.get_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'によってグループ化されたpanda DataFramesでは機能していないようです:' 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)たので、月ごとにグループ化されました。明らかに、あなたのタプル(つまり日、時間)の側面がさらに多い場合は、それらをdatetime関数に追加します。

関連する問題