seaborn distplot中的y轴是啥?

Posted

技术标签:

【中文标题】seaborn distplot中的y轴是啥?【英文标题】:What is y axis in seaborn distplot?seaborn distplot中的y轴是什么? 【发布时间】:2019-01-11 00:03:26 【问题描述】:

我有一些几何分布的数据。当我想看它时,我使用

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 个 bin 的 seaborn histplot 时:

sns.distplot(l, kde=False, norm_hist=True, bins=3)

我们得到:

如您所见,第 1 个和第 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 个 bin 用于几何分布的数据,3 个 bin 用于具有 3 个可能值的小数组 l。所以垃圾箱的数量不是问题。

我的问题是:在以 norm_hist=True 调用的 seaborn distplot 中,y 轴是什么意思?

【问题讨论】:

【参考方案1】:

来自documentation:

norm_hist:布尔值,可选

如果为 True,则直方图高度显示密度而不是计数。如果绘制了 KDE 或拟合密度,则暗示这一点。

因此,您还需要考虑 bin 宽度,即计算曲线下的面积,而不仅仅是计算 bin 高度的总和。

【讨论】:

正如我正要写的一样,这里是第二个示例的数字:bin 宽度是 l=(3-1)/3=0.6666...,直方图 bin 区域的总和是 s=(0.6+0.3+0.6)*l=1,所以从这个意义上说,标准化是正确的。 @IonicSolutions 谢谢,我之前读过文档,但从来不明白这意味着什么。奇怪的是,seaborn 或 matplotlib 没有提供开箱即用的图“x 值与概率”,其中每个 bin 都是一个不同的值,y 轴测量该值的概率,所有概率总和为 1。它将是一个非常有用的情节,我们真的需要像我在这里做的那样手动做吗?... @MisterTwister 打开一个新问题 如果您仍然不希望它总和为 1,请添加权重。但是,如果您添加 KDE,它将不起作用,因为 KDE 强制 norm_hist=True 并覆盖您的权重!所以不可能同时拥有 KDE 和总和为 1。 MattS 是对的,KDE 默认为 True ,需要设置KDE=False, norm_hist=False【参考方案2】:

x 轴是变量的值,就像在直方图中一样,但是 y 轴究竟代表什么?

ANS-> 密度图中的 y 轴是核密度估计的概率密度函数。但是,我们需要小心地指定这是概率密度而不是概率。不同之处在于概率密度是 x 轴上每单位的概率。要转换为实际概率,我们需要在 x 轴上找到特定区间的曲线下面积。有点令人困惑,因为这是概率密度而不是概率,所以 y 轴可以取大于 1 的值。密度图的唯一要求是曲线下的总面积积分为 1。我通常倾向于将密度图上的 y 轴视为仅用于不同类别之间的相对比较的值。

来自https://towardsdatascience.com/histograms-and-density-plots-in-python-f6bda88f5ac0的参考

【讨论】:

以上是关于seaborn distplot中的y轴是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Seaborn:具有相对频率的 distplot()

如何在 seaborn distplot 的 bin 中心标记 xticks?

如何规范seaborn distplot?

seaborn distplot / displot 具有多个分布

无法在 seaborn distplot 中显示图例

在 seaborn displot/histplot 函数中绘制高斯拟合直方图(不是 distplot)