密度直方图为什么在y轴上显示一些奇怪的值?

3

A have a dataframe with values:

user value
1    0
2    1
3    4
4    2
5    1

当我尝试使用density=True绘制直方图时,它显示出了非常奇怪的结果。
df.plot(kind='hist', denisty=True)

这里输入图片描述

我知道第一个柱覆盖了将近100%的值。在这种情况下,密度应该大于0.8。但是图表显示的大约是0.04。

怎么可能发生这样的事情?也许我对density的含义理解错了。 顺便说一下,如果相关的话,数据框中有大约800000个值。这是数据框的describe:

count  795846.000000
mean  5.220350
std  20.600285
min  -3.000000
25%  0.000000
50%  0.000000
75%  1.000000
max  247.000000

1
概率本身应该在0.8左右,但不是密度。(注意积分中有一个dx,也请参阅https://en.wikipedia.org/wiki/Probability_density_function) - ImportanceOfBeingErnest
2个回答

4

如果您对概率感兴趣而不是概率密度,我认为您希望使用weights而不是density。 看看这个例子,了解它们之间的区别:

df = pd.DataFrame({'x':np.random.normal(loc=5, scale=10, size=80000)})

fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(12, 4))
df.plot(kind='hist', density=True, bins=np.linspace(-100, 100, 30), ax=ax0)
df.plot(kind='hist', bins=np.linspace(-100, 100, 30), weights=np.ones(len(df))/len(df), ax=ax1)

如果您使用密度,则会按绘图区域进行归一化,而如果您使用权重,则会按箱子高度的总和进行归一化。
请参见以下图片: enter image description here

精彩的解释和示例。谢谢! - Ruslan

3
您对密度的理解有误。请参考numpy直方图的文档(找不到精确的pandas文档,但机制相同)https://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html “密度...如果为True,则结果是概率密度函数在箱中的值,归一化使得范围内的积分为1”
这意味着直方图面积的总和为1,而不是高度的总和。特别地,通过将高度乘以箱子的宽度,您将获得在一个箱子中的概率。

谢谢你!这解释了很多问题。 - Ruslan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接