【问题标题】:Plot sum over time随时间绘制总和
【发布时间】:2016-09-28 11:54:09
【问题描述】:

"Plotting a cumulative graph of python datetimes" 提供了很好的方法来使用 matplotlib 绘制日期时间列表(见下文)作为随时间的累积计数:

[
    datetime.datetime(2015, 12, 22),
    datetime.datetime(2015, 12, 23),
    datetime.datetime(2015, 12, 23), # note duplicate entry (graph increases by 2)
    datetime.datetime(2015, 12, 24),
    datetime.datetime(2015, 12, 25),
    ...
]

但是,我有一个新数据集,其中每个条目都有一个关联的值(见下文)。如何将其绘制为累积?还是我只需要遍历数据并自己将其累积到 x,y 绘图对中?

[
    (datetime.datetime(2015, 12, 22), 6), # graph increases by 6
    (datetime.datetime(2015, 12, 23), 5),
    (datetime.datetime(2015, 12, 23), 4), # graph increases by 9
    (datetime.datetime(2015, 12, 24), 12),
    (datetime.datetime(2015, 12, 25), 14),
]

【问题讨论】:

    标签: python datetime matplotlib plot graph


    【解决方案1】:

    您需要做的就是拆分xy 轴,然后使用np.cumsumnp.add.accumulate 累加y 值。这是一个例子:

    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    import datetime
    import numpy as np
    
    r = [(datetime.datetime(2015, 12, 22), 6), (datetime.datetime(2015, 12, 23), 5), (datetime.datetime(2015, 12, 23), 4), (datetime.datetime(2015, 12, 24), 12), (datetime.datetime(2015, 12, 25), 14)]
    
    x, v = zip(*[(d[0], d[1]) for d in r])  # same as #x , v = [d[0] for d in r], [d[1] for d in r]
    v = np.array(v).cumsum()  # cumulative sum of y values
    
    # now plot the results
    fig, ax = plt.subplots(1)
    ax.plot(x, v, '-o')
    fig.autofmt_xdate()
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %d'))
    ax.xaxis.set_major_locator(mdates.DayLocator())
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 2016-09-18
      • 2022-01-23
      相关资源
      最近更新 更多