这应该适合你:
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函数生成的情节来说真的会有所作为.