过度绘制泊松分布到直方图

overplot poisson distribution to histogram

我知道之前有一些与该主题相关的问题,但我找不到我的问题的具体内容。我正在尝试在直方图上绘制泊松分布。我尝试的第一件事是使用 scipy:

中统计模块中的泊松函数
import numpy
from scipy.stats import poisson

mu = mean(data)
n, bins, patches = pyplot.hist(data, 20, normed = 1)
pyplot.plot(bins, poisson.pmf(bins, mu), 'r-')
pyplot.show()

然而如图所示(我的数据的直方图为蓝色),我得到了具有三个奇怪峰值的红色图。

因此我尝试编写自己的泊松分布函数:

def poisson(mu, x):
    from scipy.misc import factorial
    return numpy.exp(-mu) * mu**x * factorial(x)**-1

y = poisson(mu, bins)

但是当我尝试打印它时,我得到了一个 nan 数组。难道我做错了什么?还是垃圾箱中的数字太大了?

print y    
[ nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan  nan nan nan  nan  nan  nan  nan  nan]

然而,当打印 stats.poisson 的结果时,我得到:

[3.25452236e-06   0.00000000e+00   0.00000000e+00   0.00000000e+00
 0.00000000e+00   3.63110218e-04   0.00000000e+00   0.00000000e+00
 0.00000000e+00   0.00000000e+00   5.24385396e-03   0.00000000e+00
 0.00000000e+00   0.00000000e+00   0.00000000e+00   1.06061293e-02
 0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00
 3.23183010e-03]
  • 对于泊松函数,您应该输入 'int' 而不是 'bins',例如 numpy.arange(1200, 1475)。

  • 对于您自己的泊松函数,您在使用 'factorial' 时必须小心,尤其是对于大 x (x>20),因为它会迅速增加!我怀疑是你南的起源。 float 的阶乘也不存在!

尝试:

X = np.arange( 1200, 1450 )
plt.plot( X, poisson.pmf(X,1375), 'r-' )