在绘制直方图时,有一个额外的条不应该在那里。即使hist
输出报告的频率为零,第一个bin中的条的高度也不为零。
这是一个最小的例子:
import numpy as np
import matplotlib.pyplot as plt
import random
t=np.array([random.random() for _ in range(10000)])
bins=np.linspace(-0.1, 1.1, 101)
plt.hist(t, bins)
plt.show()
在第一个bin中生成一个条形图,可以在该图形的左边缘和直方图的主要部分之间看到(在缩略图上很难看到,放大图像):
打印出print("%2.32f" %plt.hist(t1, bins)[0][1])
可使值精确为零。
答案 0 :(得分:1)
这是matplotlib中的一个小错误,它首先在this commit中引入。基本上,除了第一个bin之外,所有bin边缘的顶点都设置为“捕捉”到最近的像素中心。这样做是为了修复另一个错误,其中捕获第一个bin边缘阻止直方图箱与相应的线图正确对齐。
There is an open issue relating to this on the matplotlib GitHub page,所以希望很快得到解决。
同时,你可以使用plt.bar
(正如我在评论中提到的那样),或者为第一个直方图补丁手动设置捕捉:
counts, edges, patches = plt.histogram(t, bins)
patches[0].set_snap(True)