pyplot hist()频率直方图未标准化为1

Gre*_*gor 5 python matplotlib histogram

我在使用时遇到问题hist().我创建了一个包含396个条目的数组,其中包含了每个可能的结果

X + 0.5 Y + Z,
Run Code Online (Sandbox Code Playgroud)

在哪里0 <= X,Z <=50 <= Y <= 10.我想要创建的是频率直方图,其条形高度与在x,y,z独立,均匀分布的假设下获取特定值的概率一致.我以为我会hist()尝试一下:

import pandas as pd
import matplotlib.pyplot as plt
def activity(x,y,z):
    return 1 * x + 0.5 * y + 1 * z

rangex = np.arange(6)
rangey = np.arange(11)
rangez = np.arange(6)
rhs = 10
activities = [activity(x,y,z) for x in rangex for y in rangey for z in rangez]
activities = pd.Series(activities)

fig, axes = plt.subplots(1,1)
n, bins, patches = axes.hist(activities, bins=np.linspace(-0.25, 15.25, num=32), \
                             normed=True)
Run Code Online (Sandbox Code Playgroud)

这是奇怪的事情:n总计2!通过选择bins,我确保每个项目恰好落入1个bin中,并且我知道正好有31个箱子,因为我的值范围是0到15,步长为0.5.

对不起,我无法简化这个例子.具有100个值的随机试验产生正确的频率.相反,这就是直方图的样子:使用pyplot.hist进行错误的规范化

从图中可以看出,频率不总和为1.例如,在高度为0.1或更高的中心11条中.然而,红色图的频率总和为1.

我的问题:为什么我会出现错误的规范化?

请参阅以下代码以手动计算正确的直方图:

barposs, barheight = zip(*activities.value_counts(normalize=True).iteritems())
plt.bar(np.array(barposs) - 0.25, np.array(barheight), width=0.5, color='red')
Run Code Online (Sandbox Code Playgroud)

我很感激任何有用的评论.