我有一些几何分布的数据。当我想查看它时,我使用
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。当我们使用具有3个区间的海运历史图时:
sns.distplot(l, kde=False, norm_hist=True, bins=3)
我们得到:
如您所见,第一个和第三个bin的总和为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。
这两种情况下的bin数量对于每种情况下使用的两种方法都是相同的:100个面元用于几何分布的数据,3个面元用于具有3个可能值的小阵列l。
**我的问题是:**在使用norm_hist=True调用的seborn distplot中,y轴的含义是什么?
3条答案
按热度按时间mkh04yzy1#
从documentation:
规范历史:bool,可选
如果为True,直方图高度显示密度而不是计数。如果绘制的是KDE或拟合密度,这是隐含的。
因此,您还需要考虑箱宽度,即计算曲线下的面积,而不仅仅是箱高度的总和。
dbf7pr2w2#
x轴是变量的值,就像直方图一样,但y轴到底代表什么?
**ANS-〉**密度图中的y轴是核密度估计的概率密度函数。但是,我们需要注意指定这是概率密度而不是概率。不同之处在于概率密度是x轴上每单位的概率。要转换为实际概率,我们需要求出x轴上某个特定区间的曲线下面积。有点令人困惑的是,因为这是概率密度而不是概率,y轴可以取大于1的值。密度图的唯一要求是曲线下的总面积积分为1。我通常倾向于认为y-在密度图上的轴上显示为一个值,仅用于不同类别之间的相对比较。
从https://towardsdatascience.com/histograms-and-density-plots-in-python-f6bda88f5ac0的参考
2g32fytz3#
这段代码将帮助您创建类似以下的内容: