首页 > 解决方案 > 为什么密度直方图在 y 轴上显示有点奇怪的值?

问题描述

A 有一个带有值的数据框:

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

当我试图用它绘制一个直方图时,density=True它显示出非常奇怪的结果

df.plot(kind='hist', denisty=True)

在此处输入图像描述

我非常清楚第一个 bin 几乎涵盖了 100% 的值。这种情况下的密度应该大于0.8。但情节显示大约 0.04。

怎么会这样?也许我理解density错了。顺便说一句,数据框中有大约 800 000 个值,以防万一。这是数据框的一个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

标签: pythonpandasmatplotlib

解决方案


如果您对概率而不是概率密度感兴趣,我认为您想使用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)

如果您使用density绘图的面积进行归一化,则相反,如果您使用weights,则通过箱的高度之和进行归一化。

在此处输入图像描述


推荐阅读