如何在matplotlib中绘制带有日期的月份直方图

5
这是我的问题,我需要用matplotlib解决。我已经在网上找到了这方面的变体,但是我有一个新的问题,基于那些方法无法解决这个问题。
我有一个日期列表,格式如下:
20160522 20160527 20160626 20160725...
我需要制作一个柱状图,显示每个月相对频率。我希望这个柱状图上有实际的月份标签,因此x轴上有"Jan", "Feb"等标签。
如何使用matplotlib日期函数来完成这个任务?似乎它们不适用于仅查看月度分布而不考虑天数或年份的直方图。
1个回答

5
一个简单的解决方案可能是这样的:
您不需要使用datetime对象,而只需将日期字符串列表转换为月份数字列表,例如"20150419"映射到4。 然后,可以将此列表轻松地绘制为直方图。 为了获得月份名称,您可以简单地写下它们或从datetime对象列表中获取它们。
import numpy as np
import matplotlib.pyplot as plt
import datetime

dates = ["20150204", "20150404","20151004","20151005", "20151007","20150704",
         "20160404", "20160522","20160527","20160626", "20160725","20170223"]
dtm = lambda x: int(x[4:6])
months = list(map(dtm, dates))

fig, ax = plt.subplots()
bins = np.arange(1,14)
ax.hist(months, bins = bins, edgecolor="k", align='left')
ax.set_xticks(bins[:-1])
ax.set_xticklabels([datetime.date(1900,i,1).strftime('%b') for i in bins[:-1]] )

plt.show()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接