matplotlib plot_date默认为0表示Xs中缺少日期

时间:2015-08-24 19:41:31

标签: python matplotlib

我有一个数据集,用于定义事件发生的时间。它不包括非事件的时间戳。我希望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?

1 个答案:

答案 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')