import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.family'] = 'Palatino Linotype'
plt.rcParams['font.size'] = '16'

# Données
valeurs = [354.6, 352.1, 331.6, 338.3, 341.9, 326. , 354.3, 344. , 351. ,
           322.8, 325.6, 356.1, 351.3, 332.2, 330.4, 334.8, 356.7, 341.9,
           321.3, 340.8, 342.8, 353.2, 321.1, 352.4, 331.4, 365.6, 357. ,
           324.1, 339.2, 325.1, 355.1, 342.6, 325.4, 309. , 345. , 353.1]

# Calculs statistiques
moyenne = np.mean(valeurs)
ecart_type = np.std(valeurs)

# Tracer la boîte à moustaches horizontale
plt.boxplot(valeurs, vert=False, patch_artist=True,
            boxprops=dict(facecolor='lightgrey'),
            medianprops=dict(color='blue'),
            whiskerprops=dict(color='grey'),
            capprops=dict(color='grey'),)

# Ajouter les points individuels légèrement en dessous (y = 0.85 au lieu de 1)
y_points = [0.85] * len(valeurs)
plt.scatter(valeurs, y_points, color='#00000055', edgecolor='#00000055', s=20, zorder=3)

# Mise en forme
plt.yticks([])  # Pas besoin d'axe vertical
plt.xlabel("Valeurs")
plt.title("Vitesse du son dans l’air")
plt.grid(axis='x', linestyle='--', alpha=0.5)

# Ajouter des labels avec les valeurs calculées
plt.text(0.98, 0.95, f"moyenne = {moyenne:.1f}", ha='right', va='top', fontsize=10,
         transform=plt.gca().transAxes)
plt.text(0.98, 0.88, f"écart-type = {ecart_type:.1f}", ha='right', va='top', fontsize=10,
         transform=plt.gca().transAxes)

# Affichage
plt.tight_layout()
plt.show()
