python中的多个峰高斯拟合

时间:2019-03-02 14:12:53

标签: python-3.x gaussian data-fitting

我是Python新手。我正在尝试用数据绘制一条曲线,并使该曲线适合高斯曲线。我可以拟合一个峰(我想)的图。这是我可以编写的代码(大部分是从互联网上获取的),但在我看来,此代码仅适用于一个高峰。如何将具有多个峰的数据拟合为高斯?非常感谢。

import pylab as plb
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp
import numpy as np

x = ar(['data'])
y = ar(["data"])

n = len(x)                         
mean = sum(x*y)/sum(y)                   
sigma = np.sqrt(sum(y * (x - mean)**2) / sum(y))       

def gaus(x,a,x0,sigma):
    return a*exp(-(x-x0)**2/(2*sigma**2))

popt,pcov = curve_fit(gaus,x,y,p0=[1,mean,sigma])

plt.plot(x,y,'b+:',label='data')
plt.plot(x,gaus(x,*popt),'ro:',label='fit')
plt.legend()
plt.title('Fig. 3 - Fit for Voltage vs Current For Exciting Hg Atom')
plt.xlabel('Voltage Applied (V)')
plt.ylabel('Current (nA)')
plt.show()

0 个答案:

没有答案