Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python2.7:泊松分布直方图拟合困难;曲线很快下降_Python - Fatal编程技术网

Python2.7:泊松分布直方图拟合困难;曲线很快下降

Python2.7:泊松分布直方图拟合困难;曲线很快下降,python,Python,我有一组离散的数据,看起来泊松分布在0到90之间。我试图用曲线拟合数据。我的代码如下: import matplotlib.pyplot as plt import matplotlib matplotlib.style.use('ggplot') import numpy as np from scipy.stats import poisson from scipy.optimize import curve_fit from scipy.misc import factorial plt

我有一组离散的数据,看起来泊松分布在0到90之间。我试图用曲线拟合数据。我的代码如下:

import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')
import numpy as np
from scipy.stats import poisson
from scipy.optimize import curve_fit
from scipy.misc import factorial

plt.figure(figsize = (10, 10))

entries, bin_edges, patches = plt.hist(data, bins = 90, range = [1, 90], normed = True)
bin_middles = 0.5*(bin_edges[1:] + bin_edges[:-1])

def poisson(k, lamb):
    return (lamb**k/factorial(k)) * np.exp(-lamb)

params, cov = curve_fit(poisson, bin_middles, entries)
x_plot = np.linspace(1, 90, 90)

plt.plot(x_plot, poisson(x_plot, *params), 'b--', lw = 2)
plt.axvline(np.mean(data), linestyle = '--', color = 'g')
plt.ylim(0, max(entries)+max(entries)/4)
plt.xlim([0, max(x_plot)])


我无法确定为什么曲线位于左侧,并且值非常小。谢谢你的帮助

这不是一个真正的答案,但我无法在评论中了解情况。我用您的代码很好地处理了一些合成数据(添加了适当的导入):


你的数据绝对不是很泊松(峰值和宽度之间的关系是错误的,再加上右边的衰减非常缓慢),但我也找不到你的绘图如此遥远的原因。

你能提供数据吗,或者加入一些合成数据以便我可以使用它吗?或者更好的是,我认为你是对的。分布太偏了,不可能是泊松分布,我想知道这是否是影响拟合的原因。不幸的是,我无法共享数据(这是专有的),但您的合成数据让我确信,我的问题是数据问题,而不是编码问题。谢谢
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy.misc import factorial
%matplotlib inline

plt.figure(figsize = (10, 10))

#make up some synthetic data
data = np.random.poisson(3, 5000000)

entries, bin_edges, patches = plt.hist(data, bins = 90, range = [1, 90], normed = True)
bin_middles = 0.5*(bin_edges[1:] + bin_edges[:-1])

def poisson(k, lamb):
    return (lamb**k/ factorial(k)) * np.exp(-lamb)

params, cov =  curve_fit(poisson, bin_middles, entries)

x_plot = np.linspace(1, 30, 30)

plt.plot(x_plot, poisson(x_plot, *params), 'r', lw = 2)