我认为在我用matplotlib绘制直方图的某些情况下,可能会有一些问题:
pylab.figure()
H, bins, _ = pylab.hist([2,2])
print H
print bins
结果是:
[ 0. 0. 0. 0. 0. 2. 0. 0. 0. 0.]
[ 1.5 1.6 1.7 1.8 1.9 2. 2.1 2.2 2.3 2.4 2.5]
你是否看到情节"碰撞"在1.5到1.6之间,它来自哪里?我怎么能避免它?
答案 0 :(得分:0)
这很有趣。
您可以查看生成的矩形:
ax = plt.subplot(111)
h, bins, rects = ax.hist([2, 2])
for r in rects:
print(r.get_bbox())
# Bbox(x0=1.5, y0=0.0, x1=1.6, y1=0.0)
# Bbox(x0=1.6, y0=0.0, x1=1.7, y1=0.0)
# Bbox(x0=1.7, y0=0.0, x1=1.8, y1=0.0)
# Bbox(x0=1.8000000000000003, y0=0.0, x1=1.9000000000000001, y1=0.0)
# Bbox(x0=1.9, y0=0.0, x1=2.0, y1=0.0)
# Bbox(x0=1.9999999999999998, y0=0.0, x1=2.0999999999999996, y1=2.0)
# Bbox(x0=2.1000000000000005, y0=0.0, x1=2.2000000000000006, y1=0.0)
# Bbox(x0=2.2, y0=0.0, x1=2.3, y1=0.0)
# Bbox(x0=2.3, y0=0.0, x1=2.4, y1=0.0)
# Bbox(x0=2.4000000000000004, y0=0.0, x1=2.5000000000000004, y1=0.0)
显然,直方图函数为每个bin生成一个矩形,甚至是空的。虽然它们的高度为0,但它们会传递给渲染器,在某些情况下会产生虚假的东西。
我不知道如何防止这种情况发生。但是,有一个解决方案,但它相当hackish。 hist
函数为每个bin放置一个矩形块。可以手动迭代这些补丁并删除零高度的补丁:
ax = plt.subplot(111)
h, bins, rects = ax.hist([2, 2])
ax.patches = [p for p in ax.patches if p.get_height() > 0]
答案 1 :(得分:0)
这似乎是一个渲染问题。将数字保存为pdf并未显示一瞥。因此,根据您最终使用的数字,这可能会成为一个问题。