Ajuste gaussiano para Python
Estoy tratando de ajustar un gaussiano para mis datos (que ya es un gaussiano aproximado). Ya he tomado el consejo de los de aquí y lo he intentado.curve_fit
yleastsq
pero creo que me falta algo más fundamental (porque no tengo idea de cómo usar el comando). Aquí hay un vistazo al guión que tengo hasta ahora.
import pylab as plb
import matplotlib.pyplot as plt
# Read in data -- first 2 rows are header in this example.
data = plb.loadtxt('part 2.csv', skiprows=2, delimiter=',')
x = data[:,2]
y = data[:,3]
mean = sum(x*y)
sigma = sum(y*(x - mean)**2)
def gauss_function(x, a, x0, sigma):
return a*np.exp(-(x-x0)**2/(2*sigma**2))
popt, pcov = curve_fit(gauss_function, x, y, p0 = [1, mean, sigma])
plt.plot(x, gauss_function(x, *popt), label='fit')
# plot data
plt.plot(x, y,'b')
# Add some axis labels
plt.legend()
plt.title('Fig. 3 - Fit for Time Constant')
plt.xlabel('Time (s)')
plt.ylabel('Voltage (V)')
plt.show()
Lo que obtengo de esto es una forma gaussiana que es mi información original y una línea recta horizontal.
Además, me gustaría trazar mi gráfica usando puntos, en lugar de tenerlos conectados. Cualquier entrada es apreciada!