Curva gaussiana no normalizada en histogtwig

Tengo datos que son de forma gaussiana cuando se grafican como histogtwigs. Quiero trazar una curva gaussiana sobre el histogtwig para ver qué tan buenos son los datos. Estoy usando pyplot de matplotlib. Tampoco quiero normalizar el histogtwig. Puedo hacer el ajuste normal, pero estoy buscando un ajuste no normalizado. ¿Alguien aquí sabe cómo hacerlo?

¡Gracias! Abhinav Kumar

Como ejemplo:

import pylab as py import numpy as np from scipy import optimize # Generate ay = np.random.standard_normal(10000) data = py.hist(y, bins = 100) # Equation for Gaussian def f(x, a, b, c): return a * py.exp(-(x - b)**2.0 / (2 * c**2)) # Generate data from bins as a set of points x = [0.5 * (data[1][i] + data[1][i+1]) for i in xrange(len(data[1])-1)] y = data[0] popt, pcov = optimize.curve_fit(f, x, y) x_fit = py.linspace(x[0], x[-1], 100) y_fit = f(x_fit, *popt) plot(x_fit, y_fit, lw=4, color="r") 

introduzca la descripción de la imagen aquí

Esto se ajustará a una ttwig gaussiana en una distribución, debe usar el pcov para dar un número cuantitativo de cuán bueno es el ajuste.

Una mejor manera de determinar qué tan bien sus datos son gaussianos, o cualquier distribución es la prueba de chi cuadrado de Pearson . Se necesita algo de práctica para comprender, pero es una herramienta muy poderosa.

Un post antiguo que conozco, pero quería contribuir con mi código para hacer esto, que simplemente hace el truco de ‘arreglar por área’:

 from scipy.stats import norm from numpy import linspace from pylab import plot,show,hist def PlotHistNorm(data, log=False): # distribution fitting param = norm.fit(data) mean = param[0] sd = param[1] #Set large limits xlims = [-6*sd+mean, 6*sd+mean] #Plot histogram histdata = hist(data,bins=12,alpha=.3,log=log) #Generate X points x = linspace(xlims[0],xlims[1],500) #Get Y points via Normal PDF with fitted parameters pdf_fitted = norm.pdf(x,loc=mean,scale=sd) #Get histogram data, in this case bin edges xh = [0.5 * (histdata[1][r] + histdata[1][r+1]) for r in xrange(len(histdata[1])-1)] #Get bin width from this binwidth = (max(xh) - min(xh)) / len(histdata[1]) #Scale the fitted PDF by area of the histogram pdf_fitted = pdf_fitted * (len(data) * binwidth) #Plot PDF plot(x,pdf_fitted,'r-') 

Otra forma de hacer esto es encontrar el ajuste normalizado y multiplicar la distribución normal con (bin_width * longitud total de datos)

Esto anulará tu distribución normal.