9

看看这个例子:

 import matplotlib.pyplot as plt
 l = [3,3,3,2,1,4,4,5,5,5,5,5,5,5,5,5]
 plt.hist(l,normed=True)
 plt.show()

输出以图片形式发布。我有两个问题:

a) 为什么只有 4 和 5 个 bin 以它的值为中心?其他人不应该也是这样吗?有什么技巧可以让他们居中吗?

b)为什么箱子没有按比例归一化?我希望所有垃圾箱的 y 值加起来为 1。

请注意,我的真实示例在列表中包含更多值,但它们都是离散的。

在此处输入图像描述

4

1 回答 1

16

您应该调整plt.hist函数的关键字参数。其中有很多,文档可以帮助您回答其中的许多问题。

一个。) 你可以传递关键字bins=range(1,7)align=left。将bins关键字设置为序列会给出每个 bin 的边界。例如,[1,2], [2,3], [3,4], ..., [5, 6]

湾。) 检查您的垃圾箱宽度 ( rwidth!=1)。从matplotlib.pyplot.hist文档中:

如果为 True,则返回元组的第一个元素将是归一化以形成概率密度的计数,即 n/(len(x)*dbin)。在概率密度中,直方图的积分应该是1;您可以通过概率密度函数的梯形积分来验证:

这意味着您的 bin 下的区域总和为 1,但由于 bin 宽度小于 1,因此高度会以高度不等于 1 的方式进行标准化。如果您调整rwidth=1,您会得到好看的剧情:

plt.hist(l, bins=range(1,7), align='left', rwidth=1, normed=True)
于 2013-07-03T15:13:35.543 回答