将日期时间对象列表绘制为matplotlib中的折线图

时间:2018-04-09 11:22:44

标签: python matplotlib python-datetime

我有一个datetime对象的排序列表,如下所示:

X = [datetime.date(2017, 1, 14), datetime.date(2017, 1, 14), datetime.date(2017, 1, 16), datetime.date(2017, 1, 16), datetime.date(2017, 1, 18), datetime.date(2017, 1, 22), datetime.date(2017, 1, 24), datetime.date(2017, 1, 24), datetime.date(2017, 1, 29), datetime.date(2017, 2, 4), datetime.date(2017, 2, 10), datetime.date(2017, 2, 22), datetime.date(2017, 2, 28), datetime.date(2017, 3, 8), datetime.date(2017, 3, 28), datetime.date(2017, 4, 17), datetime.date(2017, 4, 20), datetime.date(2017, 4, 20), datetime.date(2017, 5, 16), datetime.date(2017, 5, 26), datetime.date(2017, 6, 12), datetime.date(2017, 6, 23), datetime.date(2017, 6, 28), datetime.date(2017, 7, 28), datetime.date(2017, 8, 14), datetime.date(2017, 8, 29), datetime.date(2017, 8, 29), datetime.date(2017, 9, 26), datetime.date(2017, 10, 4), datetime.date(2017, 10, 5), datetime.date(2017, 10, 8), datetime.date(2017, 11, 20), datetime.date(2017, 12, 2), datetime.date(2017, 12, 11), datetime.date(2017, 12, 11), datetime.date(2018, 2, 14), datetime.date(2018, 2, 16), datetime.date(2018, 3, 2), datetime.date(2018, 3, 5), datetime.date(2018, 3, 28)]

目标是绘制一个折线图,其中X轴为日期,Y轴为否。每个日期出现在列表中的次数。我知道获取折线图的最简单方法是从X中删除重复项,并生成另一个列表Y,其中包含X中每个日期时间对象的频率,然后执行

plt.plot(X,Y)

但这样做有更聪明/更pythonic的方式吗?

我已经阅读了Plotting time in Python with Matplotlib,但这没有用。

1 个答案:

答案 0 :(得分:1)

matplotlib一般不提供聚合数据的方法。毕竟这是一个绘图库。

相反,您可以依赖内置的python选项,或使用其他包如numpy或pandas。

例如使用numpy.unique

import numpy as np
import matplotlib.pyplot as plt
import datetime

Z = [datetime.date(2017, 1, 14), datetime.date(2017, 1, 14), ...,
    ..., datetime.date(2018, 3, 28)] # data from question

X,Y = np.unique(Z, return_counts=True)

plt.plot(X,Y)

plt.show()