import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

# Données
valeurs = np.array([16, 25, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 43, 44, 48])
occurrences = np.array([1, 1, 1, 2, 2, 3, 4, 4, 4, 4, 5, 1, 3, 3, 1, 3, 1])

# Reconstruction des données
data = np.repeat(valeurs, occurrences)

# Paramètres de la gaussienne
mu = np.mean(data)
sigma = np.std(data)

print(f"Moyenne = {mu:.2f}")
print(f"Ecart-type = {sigma:.2f}")

# Axe continu pour la gaussienne
x = np.linspace(min(valeurs)-2, max(valeurs)+2, 500)

# Densité gaussienne
pdf = norm.pdf(x, mu, sigma)

# Mise à l'échelle (IMPORTANT)
bin_width = 1  # largeur des barres (données discrètes)
pdf_scaled = pdf * len(data) * bin_width

# --- Affichage ---
plt.figure(figsize=(9, 5))

# Diagramme en barres (données réelles)
plt.bar(valeurs, occurrences, width=0.8, alpha=0.6, label="Données observées")

# Courbe gaussienne ajustée
plt.plot(x, pdf_scaled, 'r-', linewidth=2,
         label=f"Gaussienne (μ={mu:.2f}, σ={sigma:.2f})")

# Habillage
plt.xlabel("Nombre de coups sans bruit")
plt.ylabel("Occurrences")
plt.title("Loi gaussienne ajustée, source proche")
plt.legend()
plt.grid()

plt.show()

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: