在Python中绘制直方图时间序列

7
我想在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)

现在我可以按天分组数据:
daily = df.groupby(lambda x: x.date())

但是我卡住了。我不知道如何在使用matplotlib时得到我的直方图时间序列。任何帮助都将受到赞赏,不一定要使用pandas

1个回答

5

制作直方图并使用matplotlib的pcolor

我们需要对组进行均匀分组,因此根据样本数据的范围手动制定组。

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

对每个分组应用直方图

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>

在此输入图片描述

现在需要给轴打上标签,这个答案应该会有所帮助。


谢谢!这就可以了。我完全忘记提到 - 9999是一个缺失的数字,应该被丢弃。我会把它加到问题中。 - abudis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接