Mis a jour le 2025-04-14, 12:10

Histogramme

Histogramme :
  • res = pyplot.hist([1, 2, 2, 3, 4, 4, 4, 4, 4, 5, 5], range = (0, 5), bins = 5) : histogramme entre 0 et 5 avec 5 intervalles. La valeur retournée est un triplet avec :
    • une array donnant les nombres de points dans chaque bin (ici array([0, 1, 2, 1, 7]).
    • une array donnant les limites de chaque bin (ici, array([0., 1., 2., 3., 4., 5.])). Dans ce cas, pour chaque intervalle, la borne inférieure est incluse et la borne supérieur est exclue sauf pour la dernière !
    • une array de 5 objets matplotlib.patches.Rectangle.
    si on passe l'argument density = True, au lieu d'avoir les nombres de points, on a les fréquences normalisées dont la somme vaut 1.
Exemple simple : x = [1, 2, 2, 3, 4, 4, 4, 4, 4, 5, 5] pyplot.hist(x, range = (0, 5), bins = 5, color = 'yellow', edgecolor = 'red') pyplot.xlabel('valeurs') pyplot.ylabel('nombres') pyplot.title('Exemple d\' histogramme simple')
Attention : si la liste de valeurs données est particulière une erreur se produit :
  • si la liste est vide, il ne faut pas utiliser hist !
  • si la liste comporte un seul élément, il faut absolument préciser le paramètre range : range = (0, 100) sinon, les limites ne peuvent pas être déterminées et ça plante !
Paramètres des histogrammes :
  • pyplot.hist(x, bins = range(11)) : on peut donner aussi les limites des intervalles explicitement plutôt qu'un nombre d'intervalles.
  • pyplot.hist(x, bins = [0, 5, 6, 7, 8, 9, 10]) : on peut très bien donner des bins de taille inégale (et alors, les barres auront des largeurs inégales).
  • pyplot.hist(x, range = (0, 10), bins = 10) : donne le minimum et le maximum des valeurs représentées et le nombre de bins. Par défaut, range est (min(x), max(x)).
  • pyplot.hist(x, density = True) : trace les fréquences plutôt que les nombres en ordonnée (somme vaut 1).
  • pyplot.hist(x, weights = range(len(x))) : attribut un poids à chaque valeur.
  • align = 'mid' : les barres sont centrées entre les 2 extrémités du bin (le défaut). Sinon, align = 'left' indique que les barres sont centrées sur l'extrémité gauche du bin ('right' pour la droite).
  • orientation = 'horizontal' : histogramme horizontal.
  • rwidth = 0.5 : les barres sont réduites de largeur de 50% (avec un espace entre elles).
  • log = True : axe des y en log.
  • color = 'yellow' : la couleur des barres.
  • edgecolor = 'red' : la couleur des bordures. edgecolor = 'none' pour ne pas avoir de bordure.
  • hatch = '/' : les hachures. Valeurs possibles : '/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'
  • histtype = 'step' : trace une ligne plutôt que des barres.
  • pyplot.hist(v, cumulative = True, histtype = 'step') : distribution cumulée
  • pyplot.hist(v, cumulative = -1, histtype = 'step') : distribution cumulée renversée.
x = [1, 2, 2, 3, 4, 4, 4, 4, 4, 5, 5] pyplot.hist(x, range = (0, 5), bins = 5, color = 'yellow', edgecolor = 'red', density = True, hatch = 'x', orientation = 'horizontal', rwidth = 0.8, log = True) pyplot.ylabel('valeurs') pyplot.xlabel('frequences') pyplot.title('Histogramme horizontal')
Affichage de l'histogramme de 2 séries (les 2 couleurs sont obligatoires, par contre la couleur des bordures et les rayures ne sont communs) : x1 = [1, 2, 2, 3, 4, 4, 4, 4, 4, 5, 5] x2 = [1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5, 5] bins = [x + 0.5 for x in range(0, 6)] pyplot.hist([x1, x2], bins = bins, color = ['yellow', 'green'], edgecolor = 'red', hatch = '/', label = ['x1', 'x2'], histtype = 'bar') # bar est le defaut pyplot.ylabel('valeurs') pyplot.xlabel('nombres') pyplot.title('2 series') pyplot.legend()
Affichage de l'histogramme de 2 séries, mais sous forme superposées, l'un au dessus de l'autre. x1 = [1, 2, 2, 3, 4, 4, 4, 4, 4, 5, 5] x2 = [1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5, 5] bins = [x + 0.5 for x in range(0, 6)] pyplot.hist([x1, x2], bins = bins, color = ['yellow', 'green'], edgecolor = 'red', hatch = '/', label = ['x1', 'x2'], histtype = 'barstacked') pyplot.ylabel('valeurs') pyplot.xlabel('nombres') pyplot.title('2 series superposees') pyplot.legend()
on peut afficher 2 histogrammes superposés, l'un sur l'autre, le 2ème ayant un certain niveau de transparence pour ne pas complètement cacher l'autre : x1 = [1, 2, 2, 3, 4, 4, 4, 4, 4, 5, 5] x2 = [1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5, 5] bins = [x + 0.5 for x in range(0, 6)] pyplot.hist(x1, bins = bins, color = 'yellow', edgecolor = 'red', hatch = '/', label = 'x1') pyplot.hist(x2, bins = bins, color = 'green', alpha = 0.5, edgecolor = 'blue', hatch = '\', label = 'x2') pyplot.ylabel('valeurs') pyplot.xlabel('nombres') pyplot.title('superpose') pyplot.legend()
Affichage en parallèle d'un histogramme et d'un histogramme cumulé : x = [1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5] pyplot.hist(x, bins = 5, color = 'skyblue') pyplot.xlabel('valeurs') pyplot.ylabel('freq') ax2 = pyplot.gca().twinx() ax2.hist(x, bins = 5, cumulative = True, histtype = 'step', density = True, color = 'blue') ax2.set_ylabel('pourcentage cumulé') pyplot.tight_layout()

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert