Exemple de comment calculer et tracer une loi normale (ou loi gaussienne) avec python et matplotlib en utilisant le module stats de scipy:

from scipy.integrate import quadimport matplotlib.pyplot as pltimport scipy.statsimport numpy as npx_min = 0.0x_max = 16.0mean = 8.0std = 2.0x = np.linspace(x_min, x_max, 100)y = scipy.stats.norm.pdf(x,mean,std)plt.plot(x,y, color='coral')plt.grid()plt.xlim(x_min,x_max)plt.ylim(0,0.25)plt.title('How to plot a normal distribution in python with matplotlib',fontsize=10)plt.xlabel('x')plt.ylabel('Normal Distribution')plt.savefig("normal_distribution.png")plt.show()
Un autre exemple:

from scipy.integrate import quadimport matplotlib.pyplot as pltimport scipy.statsimport numpy as npx_min = 0.0x_max = 16.0mean = 8.0std = 3.0x = np.linspace(x_min, x_max, 100)y = scipy.stats.norm.pdf(x,mean,std)plt.plot(x,y, color='black')#----------------------------------------------------------------------------------------## fill area 1pt1 = mean + stdplt.plot([pt1 ,pt1 ],[0.0,scipy.stats.norm.pdf(pt1 ,mean, std)], color='black')pt2 = mean - stdplt.plot([pt2 ,pt2 ],[0.0,scipy.stats.norm.pdf(pt2 ,mean, std)], color='black')ptx = np.linspace(pt1, pt2, 10)pty = scipy.stats.norm.pdf(ptx,mean,std)plt.fill_between(ptx, pty, color='#0b559f', alpha='1.0')#----------------------------------------------------------------------------------------## fill area 2pt1 = mean + stdplt.plot([pt1 ,pt1 ],[0.0,scipy.stats.norm.pdf(pt1 ,mean, std)], color='black')pt2 = mean + 2.0 * stdplt.plot([pt2 ,pt2 ],[0.0,scipy.stats.norm.pdf(pt2 ,mean, std)], color='black')ptx = np.linspace(pt1, pt2, 10)pty = scipy.stats.norm.pdf(ptx,mean,std)plt.fill_between(ptx, pty, color='#2b7bba', alpha='1.0')#----------------------------------------------------------------------------------------## fill area 3pt1 = mean - stdplt.plot([pt1 ,pt1 ],[0.0,scipy.stats.norm.pdf(pt1 ,mean, std)], color='black')pt2 = mean - 2.0 * stdplt.plot([pt2 ,pt2 ],[0.0,scipy.stats.norm.pdf(pt2 ,mean, std)], color='black')ptx = np.linspace(pt1, pt2, 10)pty = scipy.stats.norm.pdf(ptx,mean,std)plt.fill_between(ptx, pty, color='#2b7bba', alpha='1.0')#----------------------------------------------------------------------------------------## fill area 4pt1 = mean + 2.0 * stdplt.plot([pt1 ,pt1 ],[0.0,scipy.stats.norm.pdf(pt1 ,mean, std)], color='black')pt2 = mean + 3.0 * stdplt.plot([pt2 ,pt2 ],[0.0,scipy.stats.norm.pdf(pt2 ,mean, std)], color='black')ptx = np.linspace(pt1, pt2, 10)pty = scipy.stats.norm.pdf(ptx,mean,std)plt.fill_between(ptx, pty, color='#539ecd', alpha='1.0')#----------------------------------------------------------------------------------------## fill area 5pt1 = mean - 2.0 * stdplt.plot([pt1 ,pt1 ],[0.0,scipy.stats.norm.pdf(pt1 ,mean, std)], color='black')pt2 = mean - 3.0 * stdplt.plot([pt2 ,pt2 ],[0.0,scipy.stats.norm.pdf(pt2 ,mean, std)], color='black')ptx = np.linspace(pt1, pt2, 10)pty = scipy.stats.norm.pdf(ptx,mean,std)plt.fill_between(ptx, pty, color='#539ecd', alpha='1.0')#----------------------------------------------------------------------------------------## fill area 6pt1 = mean + 3.0 * stdplt.plot([pt1 ,pt1 ],[0.0,scipy.stats.norm.pdf(pt1 ,mean, std)], color='black')pt2 = mean + 10.0 *stdplt.plot([pt2 ,pt2 ],[0.0,scipy.stats.norm.pdf(pt2 ,mean, std)], color='black')ptx = np.linspace(pt1, pt2, 10)pty = scipy.stats.norm.pdf(ptx,mean,std)plt.fill_between(ptx, pty, color='#89bedc', alpha='1.0')#----------------------------------------------------------------------------------------## fill area 7pt1 = mean - 3.0 * stdplt.plot([pt1 ,pt1 ],[0.0,scipy.stats.norm.pdf(pt1 ,mean, std)], color='black')pt2 = mean - 10.0 * stdplt.plot([pt2 ,pt2 ],[0.0,scipy.stats.norm.pdf(pt2 ,mean, std)], color='black')ptx = np.linspace(pt1, pt2, 10)pty = scipy.stats.norm.pdf(ptx,mean,std)plt.fill_between(ptx, pty, color='#89bedc', alpha='1.0')#----------------------------------------------------------------------------------------#plt.grid()plt.xlim(x_min,x_max)plt.ylim(0,0.25)plt.title('How to plot a normal distribution in python with matplotlib',fontsize=10)plt.xlabel('x')plt.ylabel('Normal Distribution')plt.savefig("normal_distribution_2.png")plt.show()
Références
| Liens | Site |
|---|---|
| Normal distribution | wikipedia |
| python pylab plot normal distribution | stackoverflow |
| scipy.stats.norm | scipy doc |
