Outils pour utilisateurs

Outils du site


itc:tps:tp3:exercice1_histogramme

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 !

itc/tps/tp3/exercice1_histogramme.txt · Dernière modification : de goupillwiki