Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fitting a Normal distribution to 1D data

I have a 1 dimensional array. I can compute the "mean" and "standard deviation" of this sample and plot the "Normal distribution" but I have a problem:

I want to plot the data and Normal distribution in the same figure.

I dont know how to plot both the data and the normal distribution.

Any Idea about "Gaussian probability density function in scipy.stats"?

s = np.std(array) m = np.mean(array) plt.plot(norm.pdf(array,m,s)) 
like image 752
Adel Avatar asked Nov 15 '13 21:11

Adel


People also ask

How do you fit normal distribution into data?

To fit a normal distribution we need to know the mean and the standard deviation. Remember that the mean of a binomial distribution is μ = np, and that the standard deviation for that distribution is σ = np(1− p). The normal distribution is continuous, whereas the binomial distribution is discrete.


2 Answers

You can use matplotlib to plot the histogram and the PDF (as in the link in @MrE's answer). For fitting and for computing the PDF, you can use scipy.stats.norm, as follows.

import numpy as np from scipy.stats import norm import matplotlib.pyplot as plt   # Generate some data for this demonstration. data = norm.rvs(10.0, 2.5, size=500)  # Fit a normal distribution to the data: mu, std = norm.fit(data)  # Plot the histogram. plt.hist(data, bins=25, density=True, alpha=0.6, color='g')  # Plot the PDF. xmin, xmax = plt.xlim() x = np.linspace(xmin, xmax, 100) p = norm.pdf(x, mu, std) plt.plot(x, p, 'k', linewidth=2) title = "Fit results: mu = %.2f,  std = %.2f" % (mu, std) plt.title(title)  plt.show() 

Here's the plot generated by the script:

Plot

like image 93
Warren Weckesser Avatar answered Sep 18 '22 16:09

Warren Weckesser


A simple alternative it to use seaborn (<= 0.11.2):

import numpy as np import seaborn as sns from scipy.stats import norm  # Generate simulated data n_samples = 100 rng = np.random.RandomState(0) data = rng.standard_normal(n_samples)  # Fit Gaussian distribution and plot sns.distplot(data, fit=norm, kde=False) 
like image 33
Jérome Chevalier Avatar answered Sep 19 '22 16:09

Jérome Chevalier