2015-10-18 52 views
0

我有这样的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() 

输出非常参差不齐的高斯拟合的数据。我怎样才能改善这一点,使之更加美好和平滑 - 而不增加原始数据点。

+0

“我怎样才能改善这一点,使其更加美观和平滑 - 不增加原始数据点。”这是没有意义的:如果你保留(x)数据点的数量,你的数字就会以它的低分辨率结束。请记住,适合原始数据并绘制图形是两件不同的事情。如果您确实也想显示原始数据,请在较高分辨率曲线上重叠绘制这些数据。 – Evert

回答

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')