在 Python 中将时间序列事件绘制为条形图

Posted

技术标签:

【中文标题】在 Python 中将时间序列事件绘制为条形图【英文标题】:Plot Time Series Events as Bars in Python 【发布时间】:2018-05-15 08:47:10 【问题描述】:

我想在 python 中绘制一个带有条形的时间序列。 条宽是每个条的开始和结束时间。事件类型就像一个标签和一个条形高度的计数。 在 pandas 数据框中,数据如下所示。

                       end                       event counts
start           
2016-10-02 16:58:00     2016-10-02 17:28:00     700     181
2016-10-03 07:07:00     2016-10-03 07:35:50     800     174
2016-10-03 07:36:00     2016-10-03 08:05:00     100     175
2016-10-04 19:47:00     2016-10-04 20:02:00     50      91
2016-10-05 08:09:00     2016-10-05 08:17:00     100     49

有什么想法吗?

谢谢

【问题讨论】:

我会看看这个问题:***.com/questions/42437349/… 我想很多人都有一个想法。但是为了在这里得到答案,您需要展示您尝试过的内容以及其他资源在多大程度上没有帮助您。这肯定不是一项直截了当的任务,因此他会很乐意帮助,但不会为您完成所有工作。首先编写您可以做什么,将其提供为minimal reproducible example。 您可以先查看this question。 @AtHeartEngineer 感谢您的想法,不是我的意思,但很有用 【参考方案1】:

不确定我的问题是否正确,但您可以使用fill_between()。不知道 pandas 能不能满足你的要求。

由于数据不多,所以结果图不是很壮观。

from io import StringIO
import matplotlib.patches as patches

# Just preparing the data ..

data = """         
start,end,event,counts
2016-10-02 16:58:00,2016-10-02 17:28:00,700,181
2016-10-03 07:07:00,2016-10-03 07:35:50,800,174
2016-10-03 07:36:00,2016-10-03 08:05:00,100,175
2016-10-04 19:47:00,2016-10-04 20:02:00,50,91
2016-10-05 08:09:00,2016-10-05 08:17:00,100,49
"""

df = pd.read_table(StringIO(data), sep=',')    
df.start = pd.to_datetime(df.start)
df.end = pd.to_datetime(df.end)

# Plotting ..

fig = plt.figure(figsize=(16, 4.5))
ax = fig.gca()

for index, r in df.iterrows():    
    x = (r.start.value, r.end.value)
    h = r.counts    
    ax.fill_between(x, 0, h)

【讨论】:

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

在R ggplot2中将条形图绘制到地图上

在python中绘制条形图[重复]

如何在python中绘制条形图

Python制作带有辅助y轴的组合条形图和线图

Python把matplotlib绘制的水平条形图(horizontal bar)转化为竖直的柱状图(vertical bar)实战

Python。在 Seaborn Facetgrid 上使用两个 y 轴绘制线图和条形图