python - 随时间绘制总和

标签 python datetime matplotlib plot graph

"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),
]

最佳答案

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

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()

Result as plotted by matplotlib

关于python - 随时间绘制总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37529263/

相关文章:

python - MatPlotLib、日期时间和类型错误 : ufunc 'isfinite' not supported for the input types…

python - 如何将数据框行转换为标题?

android - 在android中以编程方式设置设备时间

python - 将 3D 条形图置于 matplotlib 中给定位置的中心

MySQL 查询或过程从多行计算的值返回表

WPF:将 DateTime 类型的 viewmodel 属性绑定(bind)到 ItemsControl 中的 Calendar

python - 饼图作为 networkx 中的节点

python - headless 无尽滚动 Selenium

python - Parquet 文件的大小是否大于字符串数据中的 csv?

python - 在 Pandas DataFrame 上选择具有条件的列