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

Posted

技术标签:

【中文标题】在 Python 中绘制直方图的时间序列【英文标题】:Plot timeseries of histograms in Python 【发布时间】:2013-06-07 15:53:58 【问题描述】:

我正在尝试在 Python 中绘制时间序列的直方图。 There has been a similar question about this, but in R。所以,基本上,我需要同样的东西,但我的 R 语言真的很糟糕。我的数据集中每天通常有 48 个值。其中 - 9999 表示缺失数据。 Here's数据样本。

我开始读取数据并构造一个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

【问题讨论】:

【参考方案1】:

制作直方图并使用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>

它仍然是标记轴。 This answer 应该会有所帮助。

【讨论】:

谢谢!这应该这样做。我完全忘了提到 - 9999 是一个缺失的数字,应该被丢弃。将其添加到问题中。

以上是关于在 Python 中绘制直方图的时间序列的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中绘制配置文件直方图

如何在python中绘制组合直方图?

使用 csv 文件作为输入在 python 中绘制直方图

Python Seaborn 绘制空白直方图

使用 Seaborn Python 绘制 CDF + 累积直方图

如何按范围对csv文件中的列进行分组并使用python绘制直方图?