赋范直方图yaxis大于1

2024-09-28 01:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

有时,当我使用seaborn的displaot函数创建直方图时,norm_hist=True,y轴小于1,这是PDF的预期值。其他时候,它的值大于1

例如,如果我跑步

        sns.set(); 
        x = np.random.randn(10000)
        ax = sns.distplot(x)

然后直方图上的y轴从0.0变为0.4,如预期,但如果数据不正常,即使norm_hist=True,y轴也可能大至30

关于直方图函数的规范化参数,我遗漏了什么,例如sns.distplot的norm_hist?即使我自己通过创建一个新变量来规范化数据,因此:

        new_var = data/sum(data)

因此,无论norm_hist参数是否为真,y轴仍将显示远大于1的值(例如30)

当y轴的范围如此大时,我可以给出什么解释

我认为现在发生的是我的数据集中在零附近,所以为了使数据的面积等于1(例如在kde下),直方图的高度必须大于1…但是由于概率不能大于1,结果意味着什么

还有,我怎样才能让这些函数显示y轴上的概率


Tags: 数据函数truenormdata参数pdfseaborn
1条回答
网友
1楼 · 发布于 2024-09-28 01:32:57

规则不是所有的条加起来都是一条。规则是所有条的所有面积总和应为一。当这些条非常窄时,尽管它们的面积加起来只有一个,但它们的总和可能相当大。条的高度乘以其宽度是某个值全部在该范围内的概率。要使高度等于概率,需要宽度为1的条

这里有一个例子来说明发生了什么

import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns


fig, axs = plt.subplots(ncols=2, figsize=(14, 3))

a = np.random.normal(0, 0.01, 100000)
sns.distplot(a, bins=np.arange(-0.04, 0.04, 0.001), ax=axs[0])
axs[0].set_title('Measuring in meters')
axs[0].containers[0][40].set_color('r')

a *= 1000
sns.distplot(a, bins=np.arange(-40, 40, 1), ax=axs[1])
axs[1].set_title('Measuring in milimeters')
axs[1].containers[0][40].set_color('r')

plt.show()

demo plot

左边的图使用了0.001米宽的箱子。最高的箱子(红色)大约有40高。值落入该存储单元的概率为40*0.001 = 0.04

右边的绘图使用完全相同的数据,但测量单位为毫米。现在垃圾箱的宽度是1 mm。最高的bin大约为0.04高。由于1的仓位宽度,值落入该仓位的概率也是0.04

PS:作为概率密度函数区域大于1的分布示例,请参见Pareto distributionα = 3

相关问题 更多 >

    热门问题