【发布时间】:2018-04-09 11:22:43
【问题描述】:
我有一个排序的日期时间对象列表,如下所示:
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,但这并没有帮助。
【问题讨论】:
-
清理数据以根据需要显示它有什么不聪明/pythonic 的?即使有一个选项,
matplotlib也会做同样的事情。 -
我希望 matplotlib(或其他一些库)能够将列表 Z 转换为 X、Y 形式,其中 X 是 Z 中的唯一元素,Y 是频率。我能想到的最接近的是 Counter,但是 Counter 返回的字典不会按排序返回 X。基本上,这是我过去做过数百次的手术。我想知道它是否有一个功能。
标签: python matplotlib python-datetime