pyplot直方图的第一个bin中的额外条形

时间:2015-04-22 07:53:34

标签: python numpy matplotlib histogram

在绘制直方图时,有一个额外的条不应该在那里。即使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中生成一个条形图,可以在该图形的左边缘和直方图的主要部分之间看到(在缩略图上很难看到,放大图像): enter image description here

打印出print("%2.32f" %plt.hist(t1, bins)[0][1])可使值精确为零。

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)