【发布时间】:2018-08-07 14:06:37
【问题描述】:
我正在尝试将高斯函数拟合到我的 Python 图。我在这里附上了代码。任何更正将不胜感激!
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import math
import random
from numpy import genfromtxt
data= genfromtxt ('PVC_Cs137.txt')
plt.xlim(0,2500)
plt.ylim(0,30000)
plt.xlabel("Channel number")
plt.ylabel("Counts")
x = data[:,0]
y = data[:,1]
n = len(x)
mean = sum(x*y)/n
sigma = sum(y*(x-mean)**2)/n
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,gaus(x,*popt))
plt.show()
这是我的文件的链接: https://www.dropbox.com/s/hrqjr2jgfsjs55x/PVC_Cs137.txt?dl=0
【问题讨论】:
-
怎么了?实际和预期的结果是什么?
-
我无法适应。我想绘制给定文本文件中的数据,并用高斯函数拟合图形。
-
在拟合之前,使用“plt.plot(x,y)”检查原始数据的散点图,并且不设置 xlim 或 ylim - 这在我看来不是高斯分布。此外,您可以直接对“y = 0 if x > 7200”进行建模而无需拟合。
标签: python matplotlib scipy curve-fitting