Table des matières
Exercice 1 : histogramme et bargraph avec matplotlib
Cette 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 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 !
