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 的 bin 中心标记 xticks?