使用hist()
时遇到问题。我创建了一个包含396个条目的数组,其中包含
X + 0.5 Y + Z,
其中0 <= X,Z <=5
和0 <= 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)
这是奇怪的事情:n总计 2 !!!
通过选择bins
,我确保每个项目恰好落入1个bin中,并且我知道确实需要31个bin,因为我的值范围是0到15,步长为0.5。
对不起,我无法简化这个例子。具有100个值的随机试验产生正确的频率。相反,这就是直方图的样子:
从图中可以看出,频率总和不高于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')
我很感激任何有用的评论。