2013-06-11 25 views
7

私はヒストグラムの時系列をPythonでプロットしようとしています。 There has been a similar question about this, but in R。だから、基本的には同じことが必要ですが、Rでは本当に悪いです。データセットには通常1日あたり48個の値があります。ここで、 - 9999は欠損データを表します。 Here'sデータのサンプル。Pythonでヒストグラムの時系列をプロットする

私はデータを読み込み、pandasDataFrameを作成することから始めました。

import pandas as pd 
df = pd.read_csv('sample.csv', parse_dates=True, index_col=0, na_values='-9999') 
print df 

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 336 entries, 2008-07-25 14:00:00 to 2008-08-01 13:30:00 
Data columns (total 1 columns): 
159.487691046 330 non-null values 
dtypes: float64(1) 

今私ができる日までにグループのデータを:

daily = df.groupby(lambda x: x.date()) 

しかし、その後、私はこだわっています。私はmatplotlibでこれをどのように使ってヒストグラムの時系列データを取得するのか分かりません。助けを歓迎します。必ずしもpandasを使用する必要はありません。

答えて

5

ヒストグラムを作成し、matplotlibのpcolorを使用してください。

グループを均一にビンする必要があるため、サンプルデータの範囲に基づいてビンを手動で作成します。

In [26]: bins = np.linspace(0, 360, 10) 

histogramを各グループに適用します。

In [27]: f = lambda x: Series(np.histogram(x, bins=bins)[0], index=bins[:-1]) 

In [28]: df1 = daily.apply(f) 

In [29]: df1 
Out[29]: 
      0 40 80 120 160 200 240 280 320 
2008-07-25 0 0 0 3 18 0 0 0 0 
2008-07-26 2 0 0 0 17 6 13 1 8 
2008-07-27 4 3 10 0 0 0 0 0 31 
2008-07-28 0 7 15 0 0 0 0 6 20 
2008-07-29 0 0 0 0 0 0 20 26 0 
2008-07-30 10 1 0 0 0 0 1 25 9 
2008-07-31 30 4 1 0 0 0 0 0 12 
2008-08-01 0 0 0 0 0 0 0 14 14 

Rのリンクされた例に従えば、横軸は日付で、縦軸はビンの範囲でなければなりません。ヒストグラム値は「ヒートマップ」です。

In [30]: pcolor(df1.T) 
Out[30]: <matplotlib.collections.PolyCollection at 0xbb60e2c> 

enter image description here

それは軸にラベルを付けたまま。 This answerは助けになるはずです。

+3

料理本に追加! – Jeff

+0

ありがとう!これはそれを行う必要があります。私は完全に言及することを忘れた - 9999は欠けていて、破棄すべきです。それを質問に追加します。 – abudis

+0

これはとても涼しいです! –

関連する問題