Python seaborn.distplot返回计数而不是概率

时间:2019-11-24 10:44:42

标签: python seaborn probability-distribution

我有一个pandas系列x

0      -0.000069
1      -0.000059
2      -0.000025
3      -0.000021
4      -0.000021
          ...   
1036    0.000032
1037    0.000033
1038    0.000052
1039    0.000055
1040    0.000092
Name: c, Length: 1041, dtype: float64

我想用直方图绘制概率密度函数,在其中我使用了seaborn.distplot

import matplotlib.pyplot as plt
import seaborn as sns

sns.distplot(x, hist=True, kde=True, bins=100,
             hist_kws={'edgecolor':'black', 'color': 'r'},
             kde_kws={'linewidth': 1, 'color': 'b'})

plt.xlim(-0.00002, 0.00002)
plt.ylim(ymin=0)
plt.xlabel("x")
plt.ylabel("probability")
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0))

plt.show()

结果,我得到下图:

enter image description here

如图所示,纵轴表示计数,但是我想要(并且从此代码中期望)概率。我很困惑,因为相同的代码可以在另一个pandas系列中正常工作。例如,使用具有不同系列(和不同标签等)的相同代码,我可以产生以下正确的图形:

enter image description here

您知道为什么此代码不适用于我的第一个系列和/或可能的解决方案吗?

2 个答案:

答案 0 :(得分:0)

可以说,“问题”是在不是概率的情况下标记了y轴“概率”的事实。概率是曲线下的面积(等于1)。

在第一个图中,您的密度非常大,但是x值非常小,因此两者的乘积保持概率一致。有关更多信息,请参见probability density function

答案 1 :(得分:0)

我会编辑您的 plt.ylabel("probability") 并将其标记为其他内容(即正确的指示符)或根本不标记。

我建议使用 plt.ylabel("probability density")