Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plot Normal distribution with Matplotlib

please help me to plot the normal distribution of the folowing data:

DATA:

import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm  h = [186, 176, 158, 180, 186, 168, 168, 164, 178, 170, 189, 195, 172,      187, 180, 186, 185, 168, 179, 178, 183, 179, 170, 175, 186, 159,      161, 178, 175, 185, 175, 162, 173, 172, 177, 175, 172, 177, 180]  std = np.std(h)  mean = np.mean(h)     plt.plot(norm.pdf(h,mean,std)) 

output:

Standard Deriviation = 8.54065575872  mean = 176.076923077 

the plot is incorrect, what is wrong with my code?

like image 296
Adel Avatar asked Nov 15 '13 22:11

Adel


2 Answers

  • Note: This solution is using pylab, not matplotlib.pyplot

You may try using hist to put your data info along with the fitted curve as below:

import numpy as np import scipy.stats as stats import pylab as pl  h = sorted([186, 176, 158, 180, 186, 168, 168, 164, 178, 170, 189, 195, 172,      187, 180, 186, 185, 168, 179, 178, 183, 179, 170, 175, 186, 159,      161, 178, 175, 185, 175, 162, 173, 172, 177, 175, 172, 177, 180])  #sorted  fit = stats.norm.pdf(h, np.mean(h), np.std(h))  #this is a fitting indeed  pl.plot(h,fit,'-o')  pl.hist(h,normed=True)      #use this to draw histogram of your data  pl.show()                   #use may also need add this  

enter image description here

like image 112
Developer Avatar answered Sep 20 '22 09:09

Developer


Assuming you're getting norm from scipy.stats, you probably just need to sort your list:

import numpy as np import scipy.stats as stats import matplotlib.pyplot as plt  h = [186, 176, 158, 180, 186, 168, 168, 164, 178, 170, 189, 195, 172,      187, 180, 186, 185, 168, 179, 178, 183, 179, 170, 175, 186, 159,      161, 178, 175, 185, 175, 162, 173, 172, 177, 175, 172, 177, 180] h.sort() hmean = np.mean(h) hstd = np.std(h) pdf = stats.norm.pdf(h, hmean, hstd) plt.plot(h, pdf) # including h here is crucial 

And so I get:

enter image description here

like image 21
Paul H Avatar answered Sep 23 '22 09:09

Paul H