我有这个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 :(得分: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')
。