我有一个数据集,用于定义事件发生的时间。它不包括非事件的时间戳。我希望0-1图表在没有发生事件的日子显示0,在1天内至少发生1个事件。
我的matplotlib代码:
#xs = [a bunch of datetimes]
#ys = [1,1,.....,1] #of length Xs
fig, ax = plt.subplots()
ax.plot_date(xs, ys, '-')
# format the ticks
months = MonthLocator()
days = DayLocator()
yearsFmt = DateFormatter('%m-%d')
ax.xaxis.set_major_locator(months)
ax.xaxis.set_major_formatter(yearsFmt)
ax.xaxis.set_minor_locator(days)
ax.autoscale_view()
ax.grid(True)
fig.autofmt_xdate()
plt.savefig('foo.png')
这只显示从xs的第一个日期到xs中的最后一个日期的y=1
的平面线。可能它是在没有Xs值的时间内插,这些值都是1。
对于不在xs中的所有日期,如何让plot_date
的y值为0?
答案 0 :(得分:0)
我最终使用Pandas来解决这个问题。但是,我仍然认为关闭插值应该是plot_date
中支持的功能。
sorted_xs = sorted(xs)
#form a pandas date index
#http://pandas.pydata.org/pandas-docs/stable/generated/pandas.date_range.html
freq = {}
for i in pandas.date_range(start=sorted_xs[0], end=sorted_xs[-1], freq='D', normalize = True):
freq[i] = 0
for i in xs:
freq[i] += 1
plot_ys = []
for key, value in sorted(freq.items(), key=operator.itemgetter(0), reverse=True):
plot_xs.append(key)
plot_ys.append(value)
fig, ax = plt.subplots()
ax.plot_date(plot_xs, plot_ys, '-')
yearsFmt = DateFormatter('%m-%d')
ax.xaxis.set_major_locator(MonthLocator())
ax.xaxis.set_major_formatter(yearsFmt)
ax.xaxis.set_minor_locator(DayLocator())
ax.autoscale_view()
fig.autofmt_xdate()
plt.savefig('foo.png')