Python 如何将高斯法线与直方图匹配?

Python 如何将高斯法线与直方图匹配?,python,numpy,matplotlib,scipy,scipy-optimize,Python,Numpy,Matplotlib,Scipy,Scipy Optimize,我想知道是否有一种很好的方法可以将高斯法线与numpy数组形式的直方图进行匹配np.histogram(array,bins) 如何在同一图表上绘制这样的曲线,并根据直方图调整高度和宽度?您可以使用高斯(即正态)分布拟合直方图,例如使用scipy的曲线拟合。我在下面写了一个小例子。请注意,根据您的数据,您可能需要找到一种方法来猜测拟合的起始值(p0)。较差的起始值可能会导致拟合失败 import numpy as np from scipy.optimize import curve_fit i

我想知道是否有一种很好的方法可以将高斯法线与numpy数组形式的直方图进行匹配
np.histogram(array,bins)


如何在同一图表上绘制这样的曲线,并根据直方图调整高度和宽度?

您可以使用高斯(即正态)分布拟合直方图,例如使用scipy的曲线拟合。我在下面写了一个小例子。请注意,根据您的数据,您可能需要找到一种方法来猜测拟合的起始值(p0)。较差的起始值可能会导致拟合失败

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
from scipy.stats import norm

def fit_func(x,a,mu,sigma,c):
    """gaussian function used for the fit"""
    return a * norm.pdf(x,loc=mu,scale=sigma) + c

#make up some normally distributed data and do a histogram
y = 2 * np.random.normal(loc=1,scale=2,size=1000) + 2
no_bins = 20
hist,left = np.histogram(y,bins=no_bins)
centers = left[:-1] + (left[1] - left[0])

#fit the histogram
p0 = [2,0,2,2] #starting values for the fit
p1,_ = curve_fit(fit_func,centers,hist,p0,maxfev=10000)

#plot the histogram and fit together
fig,ax = plt.subplots()
ax.hist(y,bins=no_bins)
x = np.linspace(left[0],left[-1],1000)
y_fit = fit_func(x, *p1)
ax.plot(x,y_fit,'r-')
plt.show()

我认为不需要任何“拟合”:正态分布,因此您只需将其插入PDF的公式并绘制它。另请参见和关于将高斯正态分布和kde拟合为histogram@ForceBru那么,简单地绘制曲线将不会使其与直方图匹配。需要进行一些重新缩放。如果垃圾箱的宽度不相等,甚至不可能与之匹配。还可以看看Seaborn的。这将缩小直方图以适合kde。