abu*_*dis 7 python matplotlib histogram pandas
我正在尝试用Python绘制时间序列的直方图.已经有这个了类似的问题,但R中.所以,基本上,我需要相同的东西,但我在R中真的很糟糕.我的数据集中每天通常有48个值.其中 - 9999表示缺少数据. 这是数据的样本.
我开始阅读数据并构建一个pandas DataFrame.
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)
Run Code Online (Sandbox Code Playgroud)
现在我可以按天分组数据:
daily = df.groupby(lambda x: x.date())
Run Code Online (Sandbox Code Playgroud)
但后来我被卡住了.我不知道如何使用它matplotlib来获取直方图的时间序列.任何帮助表示赞赏,不一定使用pandas.
制作直方图并使用matplotlib pcolor.
我们需要统一分组,因此我们根据样本数据的范围手动制作分档.
In [26]: bins = np.linspace(0, 360, 10)
Run Code Online (Sandbox Code Playgroud)
适用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
Run Code Online (Sandbox Code Playgroud)
在R中的链接示例之后,水平轴应为日期,垂直轴应为区间范围.直方图值是"热图".
In [30]: pcolor(df1.T)
Out[30]: <matplotlib.collections.PolyCollection at 0xbb60e2c>
Run Code Online (Sandbox Code Playgroud)

它仍然是标记轴.这个答案应该有所帮助.