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

时间:2017-04-07 17:05:01

标签: python matplotlib

所以这是我的问题,我需要用matplotlib来解决。我已经在网上发现了这个变种,但我有一个新的皱纹,我似乎无法根据这些来弄清楚。

我有这种格式的日期列表

  1. 20160522
  2. 20160527
  3. 20160626
  4. 20160725 ...
  5. 我需要制作他们月份相对频率的直方图。我希望这个直方图在那里有实际的月份标签,以便x轴有“Jan”,“Feb”等标签......

    如何使用matplotlib日期例程执行此操作?似乎他们不能以这种方式很好地使用直方图,我只关注月度分布,而不是日期或年份....

1 个答案:

答案 0 :(得分:2)

一个简单的解决方案可能如下:
您根本不需要使用日期时间对象,只需将日期字符串列表转换为月份数列表,例如"20150419"映射到4。 然后可以将该列表轻松地绘制为直方图。 为了获得月份'名称,您可以简单地将它们写下来或从日期时间对象列表中获取它们。

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