Mise à l'échelle d'une distribution normale en Python
Je veux tracer un histogramme pour une distribution normale et également tracer la distribution normale correspondante dessus. Il existe plusieurs exemples disponibles en ligne concernant les distributions normales avec l'axe des y normalisé avec density=True. Dans mon exemple, j'essaie de former la courbe de distribution normale sans la normalisation du type de densité. Peut-être, cela pourrait être une question mathématique implicitement, mais je ne pouvais pas comprendre comment «dénormaliser» la courbe de distribution. Voici mon code:
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
mu = 1e-3
std = 1.0e-4
nsize = 10000
ymax = 5000
# Generate some data for this demonstration.
data = norm.rvs(mu, std, size=nsize)
# Plot the histogram.
plt.hist(data, bins=20, color='b', edgecolor='black')
# Plot the PDF.
xmin, xmax = [0.5e-3, 1.5e-3] #plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std) # something to do with this line
plt.plot(x, p, 'k', linewidth=2)
plt.axvline(mu, linestyle='dashed', color='black')
plt.ylim([0, ymax])
Cela produit le tracé suivant.
Comme on peut le voir, la zone sous l'histogramme sera égale à 10000 ( nsize) qui est le nombre de points de données. Cependant, il n'en est pas ainsi avec la «courbe de distribution». Comment obtenir la correspondance de la courbe avec l'histogramme?
Réponses
Cela ressemble à des pltretours histqui totalisent nsize. Nous pouvons donc simplement évoluer p:
# Plot the histogram.
hist, bins, _ = plt.hist(data, bins=20, color='b', edgecolor='black')
# Plot the PDF.
xmin, xmax = [0.5e-3, 1.5e-3] #plt.xlim()
# changes here
p = norm.pdf(bins, mu, std)
plt.plot(bins, p/p.sum() * nsize , 'r', linewidth=2)
Production: