Python 在matplotlib中将日期时间对象打印为折线图

Python 在matplotlib中将日期时间对象打印为折线图,python,matplotlib,python-datetime,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,

我有一个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中每个datetime对象的频率,并执行

plt.plot(X,Y)
但是有没有一种更聪明/更像蟒蛇的方法呢


我已经读过了,但这没有帮助。

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

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

例如,使用:


清理数据以按需要显示数据有什么不明智的地方?即使有一个选项,
matplotlib
也会做同样的事情。我希望matplotlib(或其他一些库)会有一个功能将列表Z转换为X,Y形式,其中X是Z中唯一的元素,Y是频率。我能想到的最接近的是计数器,但计数器返回的字典不会返回排序后的X。基本上,这是我过去做过几百次的手术。我想知道它是否有功能。这很有帮助!np.unique()是否保证原始列表中元素的顺序?否,np.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()