> Modules non standards > Matplotlib > Histogramme
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