我有一些几何分布的数据。当我想查看它时,我使用
sns.distplot(data, kde=False, norm_hist=True, bins=100)
其结果是一张图片:
然而,柱状图的高度不相加等于1,这意味着y轴并未显示概率,而是另一种不同的结果。如果我们使用
weights = np.ones_like(np.array(data))/float(len(np.array(data)))
plt.hist(data, weights=weights, bins = 100)
Y轴应显示概率,因为箱子的高度总和为1:
在这里可以更清楚地看到:假设我们有一个列表
l = [1, 3, 2, 1, 3]
我们有两个1,两个3和一个2,所以它们各自的概率分别为2/5、2/5和1/5。当我们使用seaborn histplot 的3个bin时:
sns.distplot(l, kde=False, norm_hist=True, bins=3)
我们得到:
正如您所看到的,第1个和第3个箱子的总和已经达到0.6+0.6=1.2,已经大于1了,因此y轴不是概率。当我们使用
weights = np.ones_like(np.array(l))/float(len(np.array(l)))
plt.hist(l, weights=weights, bins = 3)
我们得到:
而y轴是概率,因为0.4+0.4+0.2=1,符合预期。这两种情况中使用的方法的条形数是相同的:对于几何分布数据,使用的方法都是100个条形;对于具有3个可能值的小数组l,使用的方法都是3个条形。因此,条形数不是问题。
我的问题是:在使用norm_hist=True调用seaborn distplot时,y轴的含义是什么?
l=(3-1)/3=0.6666...
,直方图箱子面积之和为s=(0.6+0.3+0.6)*l=1
,因此在这种意义上,归一化是正确的。 - Thomas Kühn