我是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()