在 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 中将时间序列事件绘制为条形图的主要内容,如果未能解决你的问题,请参考以下文章
Python把matplotlib绘制的水平条形图(horizontal bar)转化为竖直的柱状图(vertical bar)实战