修改python脚本以获得平滑的高斯拟合

时间:2015-10-18 21:49:13

标签: python

我有这个python脚本:

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

x = ar(range(10))
y = ar([0,1,2,3,4,5,4,3,2,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=[max(y),mean,sigma])

plt.plot(x,y,'b+:',label='data')
plt.plot(x,gaus(x,*popt),'r-',label='fit')
plt.legend()
plt.title('Fig. 3 - Fit for Time Constant')
plt.xlabel('Time (s)')
plt.ylabel('Voltage (V)')
print(sigma)
print(mean)
plt.show()

输出非常锯齿状的高斯拟合数据。如何在不增加原始数据点的情况下改进它以使其变得美观和流畅。

1 个答案:

答案 0 :(得分:0)

您可以使用更多点来绘制结果。因此,您需要再创建两个数组,然后包含这些点。也许是这样的:

import numpy as np

#Calculation is done here

#Now calculate more points for the plot
step = 0.1
plotx = []
ploty = []

for value in np.arange(min(x),max(x)+step,step):
    plotx.append(value)
    ploty.append(gaus(value,*popt))

您需要在绘图部分添加plt.plot(plotx,ploty,'b-',label='more points')