首页 > 编程知识 正文

高斯曲线函数,高斯曲线拟合算法

时间:2023-05-06 13:49:08 阅读:230310 作者:2886

我想在Python中将多条zgddt曲线拟合为质谱数据。现在,我一次将数据拟合成一个zgddt - 一次一个范围。如何在Python中拟合多个zgddt曲线到质谱数据?

有没有更简化的方法来做到这一点?有没有办法通过循环运行数据来在每个峰值处绘制zgddt?我猜想有一个更好的方法,但我已经梳理了互联网。

我的两个zgddt图如下所示。

下面是我当前的代码:

import numpy as np

import matplotlib.pyplot as plt

import scipy.optimize as opt

from scipy.interpolate import interp1d

RGAdata = np.loadtxt("/Users/ilenemitchell/Desktop/RGAscan.txt", skiprows=14)

RGAdata=RGAdata.transpose()

x=RGAdata[0]

y=RGAdata[1]

# graph labels

plt.ylabel('ion current')

plt.xlabel('mass/charge ratio')

plt.xticks(np.arange(min(RGAdata[0]), max(RGAdata[0])+2, 2.0))

plt.ylim([10**-12.5, 10**-9])

plt.title('RGA Data Jul 25, 2017')

plt.semilogy(x, y,'b')

#fitting a guassian to a peak

def gauss(x, a, mu, sig):

return a*np.exp(-(x-mu)**2/(2*sig**2))

fitx=x[(x>40)*(x<43)]

fity=y[(x>40)*(x<43)]

mu=np.sum(fitx*fity)/np.sum(fity)

sig=np.sqrt(np.sum(fity*(fitx-mu)**2)/np.sum(fity))

print (mu, sig, max(fity))

popt, pcov = opt.curve_fit(gauss, fitx, fity, p0=[max(fity),mu, sig])

plt.semilogy(x, gauss(x, popt[0],popt[1],popt[2]), 'r-', label='fit')

#second guassian

fitx2=x[(x>26)*(x<31)]

fity2=y[(x>26)*(x<31)]

mu=np.sum(fitx2*fity2)/np.sum(fity2)

sig=np.sqrt(np.sum(fity2*(fitx2-mu)**2)/np.sum(fity2))

print (mu, sig, max(fity2))

popt2, pcov2 = opt.curve_fit(gauss, fitx2, fity2, p0=[max(fity2),mu, sig])

plt.semilogy(x, gauss(x, popt2[0],popt2[1],popt2[2]), 'm', label='fit2')

plt.show()

2017-07-28

MsPhyz

+1

请问您可以提供一些示例数据吗?另外,您是否可以用箭头显示图像,以表明您希望用zgddt拟合突出显示什么? –

+0

当然。我刚刚更新了照片(上面链接)。我还上传了一个示例数据的链接。 Thx –

+0

您必须想出一种方法来识别峰值及其周围的范围,很可能使用滚动窗口技术。一旦你写了这个函数,你可以遍历整个数据集。 –

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。