这是一个错误,由1.5.x版本显示,支持单个日期时间类型数据的直方图.以前版本的matplotlib不会对日期时间数据进行直方图,无论是否堆叠,都会出现类似的错误,即无法将日期时间与浮点数进行比较.
默认值是由this line of code引发的.正如您所看到的那样,只有在未指定bin边缘并且尝试在时间序列中找到最小值时才会调用它(将其与np.inf进行比较并采用最小值).您可以通过在调用中指定bin边缘来解决此问题,但随后会导致进一步失败,因为在引擎盖下调用的numpy直方图函数会查找小于零的宽度区间.
当一个datetime.datetime对象列表传递给pyplot.hist()函数时,“引擎盖下”,数据实际上转换为UNIX纪元时间戳(你可以从x轴的标签中猜出这一点).当输入是datetime.datetime对象列表的列表时,不会执行此操作.
在那个阶段,我认为我们必须把它称为bug,你必须使用你已经发现的时间戳 – 例如h.hist(对于数据中的s,[[t.timestamp()for t in s],stacked = True).即使直方图的实际数据是时间戳,您仍然可以以日期格式给出bin标签,因此这应该对用户透明.
我将看看是否可以找到更好的解决方法/修复,并可能在matplotlib github上引发问题.
有效的代码(matplotlib 1.5.1,Python 3),尽管有点混乱
import datetime
import matplotlib.pyplot as plt
data = [[datetime.datetime(2015,squeeze=False)
h = histograms[1][0]
h.hist([[t.timestamp() for t in l] for l in data],stacked=True)
locs,labels = plt.xticks()
plt.xticks(locs,[datetime.datetime.fromtimestamp(t) for t in locs],rotation='vertical')
plt.gcf().subplots_adjust(bottom=0.4)
fig.set_size_inches(4,15)
plt.show()
产生