====== Exercice 1 : histogramme et bargraph avec matplotlib ====== Cette [[https://matplotlib.org/stable/gallery/index.html|galerie d'exemples]] montre la grande diversité de fonctions graphiques disponibles. J'insiste : Si vous avez une courbe à faire dans le cadre d'une présentation, d'un rapport... Vous obtiendrez avec matplotlib des graphiques d'une qualité infiniment supérieures à tout ce que vous pourrez faire avec n'importe quel tableur, et ce avec moins d'efforts. ===== Exemple ===== On se donne une liste de notes à un devoir. Ces notes sont des entiers allant de 0 à 20, bornes comprises. Il y aura 48 de ces notes (48 élèves dans cette classe fictive). Pour l'exemple, on se donne le tableau ''data = [4, 6, 11, 2, 14, 6, 15, 5, 20, 11, 2, 14, 8, 12, 4, 2, 19, 18, 20, 2, 4, 13, 4, 14, 10, 5, 10, 19, 2, 3, 10, 16, 7, 11, 8, 13, 10, 5, 12, 5, 19, 14, 16, 17, 17, 8, 20, 8]''. Vous constatez qu'il s'agit de données brutes : 2 élèves ont eu 6, donc le 6 apparaît deux fois. Ne confondez pas histogramme et graphique en bâtons ! * Si notre but est de représenter des colonnes avec le nombre copies pour chaque note, c'est un diagramme en bâtons -- bargraph. * Si notre but est de représenter une répartition dans des intervalles de notes, par exemple les copies entre 0 et 5, les copies entre 5 et 8... Alors c'est un histogramme. ===== Bargraph ===== import matplotlib.pyplot as plt import numpy as np data = [4, 6, 11, 2, 14, 6, 15, 5, 20, 11, 2, 14, 8, 12, 4, 2, 19, 18, 20, 2, 4, 13, 4, 14, 10, 5, 10, 19, 2, 3, 10, 16, 7, 11, 8, 13, 10, 5, 12, 5, 19, 14, 16, 17, 17, 8, 20, 8] # comptage des valeurs et effectifs valeurs, effectifs = np.unique(data, return_counts=True) plt.figure() plt.bar(valeurs, effectifs) plt.title('notes du DS 1') plt.xticks(valeurs) # réglage des graduations sur l'axe x plt.xlabel('notes') plt.ylabel('effectif') plt.show() ===== Cas d'un histogramme ===== Dans ce cas, pas besoin de faire le comptage des effectifs, la fonction ''hist'' sans charge. Mais il faut préciser les intervalles retenus. Par exemple si on veut les classes de valeurs [0 ; 5[, [5 ; 8[, [8 ; 12[, [12 ; 15[; [15 ; 20] -- notez que la valeur max est bien incluse -- il suffira de préciser ''bins = [0, 5, 8, 12, 15, 20]'' comme argument de ''hist''. import matplotlib.pyplot as plt data = [4, 6, 11, 2, 14, 6, 15, 5, 20, 11, 2, 14, 8, 12, 4, 2, 19, 18, 20, 2, 4, 13, 4, 14, 10, 5, 10, 19, 2, 3, 10, 16, 7, 11, 8, 13, 10, 5, 12, 5, 19, 14, 16, 17, 17, 8, 20, 8] plt.figure() plt.hist(data, bins=[0, 5, 8, 12, 15, 20], density = True) plt.title('notes du DS 1') plt.xlabel('notes') plt.ylabel('effectif') plt.show() ''density = True'' permet d'indiquer que l'on veut un vrai histogramme : * ''density = True'' : l'aire de chaque rectangle représente la fréquence des items de l'intervalle, * ''density = False'' -- valeur par défaut : la hauteur de chaque rectangle représente l'effectif de l'intervalle. ''help(plt.hist)'' donne la spécification de la fonction avec toute la liste des paramètres possibles, dont la plupart sont dotés d’une valeur par défaut. On peut également trouver cela sur la [[https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.hist.html?highlight=hist|documentation en ligne]]. Remarquez que vous trouverez de l'aide sur internet en français, mais ce sera plus simple si vous comprenez un minimum d'anglais !