python绘制时间节点事件图,绘制python数据时间的累积图

这应该适合你:

counts = arange(0, len(list_of_dates))

plot(list_of_dates, counts)

当然,你可以给图表调用一些常用的选项,让图形看起来像你想要的. (我会指出,matplotlib非常擅长处理日期和时间.)

另一个选项是hist function – 它有一个选项’cumulative = True’可能是有用的.您可以创建累积直方图,显示在任何给定日期之前发生的事件数量,如下所示:

from pyplot import hist

from matplotlib.dates import date2num

hist(date2num(list_of_dates), cumulative=True)

但是这会产生一个条形图,这可能不是你想要的,而在任何情况下,使水平轴上的日期标签正确显示可能需要一些Fudging.

编辑:我有一个感觉,你真正想要的是每个日期的一点(或酒吧),相应的y值是发生到(包括?)该日期的事件的数量.在这种情况下,我建议这样做:

grouped_dates = [[d, len(list(g))] for d,g in itertools.groupby(list_of_dates, lambda k: k.date())]

dates, counts = grouped_dates.transpose()

counts = counts.cumsum()

step(dates, counts)

来自itertools模块的groupby函数将产生您要查找的数据类型:只有每个日期的单个实例,并附带有具有该日期的所有datetime对象的列表(实际上是迭代器).正如Jouni在评论中所建议的那样,步骤功能将给出一个在每个事件发生的日子进行升级的图形,所以我建议使用它代替情节.

(帽子提示给EOL提醒我关于cumsum)

如果您想每天都有一个点,无论是否在当天发生任何事件,您需要修改以上代码:

from matplotlib.dates import drange, num2date

date_dict = dict((d, len(list(g))) for d,g in itertools.groupby(list_of_dates, lambda k: k.date()))

dates = num2date(drange(min(list_of_dates).date(), max(list_of_dates).date() + timedelta(1), timedelta(1)))

counts = asarray([date_dict.get(d.date(), 0) for d in dates]).cumsum()

step(dates, counts)

我不认为这对于通过step函数生成的情节来说真的会有所作为.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值