Seaborn distplot中的y轴是什么?

时间:2018-08-03 06:47:44

标签: python matplotlib seaborn

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

sns.distplot(data, kde=False, norm_hist=True, bins=100)

这是一张图片:

Plot 1a

但是,垃圾箱高度的总和不等于1,这意味着y轴没有显示概率,这是有所不同的。如果相反,我们使用

weights = np.ones_like(np.array(data))/float(len(np.array(data)))
plt.hist(data, weights=weights, bins = 100)

y轴应显示概率,因为箱高度总计为1:

Plot 1b

在这里可以更清楚地看到:假设我们有一个列表

l = [1, 3, 2, 1, 3]

我们有两个1,两个3和一个2,因此它们各自的概率分别为2 / 5、2 / 5和1/5。当我们使用带有三个垃圾箱的seaborn histplot时:

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

我们得到:

Plot 2a

如您所见,第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)

我们得到:

enter image description here

y轴为概率,如预期的那样为0.4 + 0.4 + 0.2 = 1。

在这两种情况下,每种情况下使用的两种方法的bin数量是相同的:100个bin用于几何分布数据,3个bin用于具有3个可能值的小数组l。因此,垃圾箱数量不是问题。

我的问题是:在以norm_hist = True调用的seadist distplot中,y轴的含义是什么?

2 个答案:

答案 0 :(得分:10)

来自documentation

  

norm_hist :布尔型,可选

     

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

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

答案 1 :(得分:2)

x轴就像直方图一样是变量的值,但是y轴到底代表什么?

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

摘自https://towardsdatascience.com/histograms-and-density-plots-in-python-f6bda88f5ac0