Histogramme¶
Les histogrammes se construisent à partir d'une liste de valeurs et des intervalles.
Histogramme simple¶
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau de 50 valeurs comprises entre 0 et 9
valeurs = np.random.randint(0, 10, 50)
print(valeurs) # Affichage des valeurs
# Création d'un tableau avec les intervalles centrés sur la valeur entière
inter = [-0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]
plt.hist(valeurs, bins=inter, rwidth=0.8) # Création de l'histogramme
plt.xlabel('Valeurs')
plt.xticks(np.arange(0, 10))
plt.ylabel('Nombres')
plt.title("Exemple d'histogramme simple")
plt.show()
1 2 |
|
Personnalisation des intervalles¶
Pour modifier les intervalles, il est possible d'utiliser plusieurs combinaisons des paramètres range
et bins
.
Paramètre | Détails |
---|---|
bins | Si c'est une valeur entière, défini le nombre de parts égal du paramètre range Si c'est une liste, un tableau ou une séquence, il défini les différents intervalles (valeur de gauche incluse et celle de droite exclue (sauf la dernière)). Les intervalles peuvent être de largeur inégale. |
range | Valeurs min et max des intervalles |
Exemples d'utilisation :
plt.hist(valeurs, range=(0,9), bins=9)
: les valeurs sont comprises entre 0 et 9 avec 9 intervalles de taille égale ([0,1[,[1,2[, ...,[8,9]) ;plt.hist(valeurs, range=(0,9))
: identique au précédent ;plt.hist(valeurs, bins=range(10))
: même résultat que précédemment, mais en indiquant explicitement les intervalles ;plt.hist(valeurs, bins=np.linspace(-0.5,9.5,11))
: création des intervalles de manière explicite centrés sur la valeur entière.
Personnalisation de l'histogramme¶
Les paramètres pour modifier l'apparence de l'histogramme sont disponibles ci-dessous :
Paramètre | Détails |
---|---|
density=True | Trace les fréquences plutôt que les nombres en ordonnée (somme vaut 1). |
weights=[1,2,1] | Tableau de même dimension que les valeurs qui attribue un poids à chaque intervalle. S'applique uniquement si density=True . |
cumulative=True | On construit l'histogramme du plus petit au plus grand est chaque barre prend ça valeur plus le cumul des valeurs plus petites (de gauche) |
histtype='bar' | Défini le type d'histogramme à afficher : - 'bar' histogramme traditionnel avec des barres ; - 'barstacked' si on a plusieurs liste de valeurs, elles sont affichées empilées l'une sur l'autre et pas côte-à-côte ; - 'step' génère une courbe (contour) à partir de l'histogramme ; - 'stepfilled' génère une courbe (contour) et la zone entre le 0 et la valeur est coloriée. |
align='mid' | Alignement de la barre par rapport au centre de l'intervalle : 'left', 'mid'ou 'right'. |
orientation='vertical' | Orientation des barres : 'horizontal' ou 'vertical'. |
rwidth=0.8 | Largeur relative de la barre par rapport à l'intervalle (ici 80 %). |
log=True | Utilise une échelle logarithmique. |
color='red' | Couleur des barres. |
edgecolor='black' | Couleur du cadre des barres. |
label='Série 1' | Nom donné à la série. C'est le nom qui apparaît dans la légende. |
stacked=True | Si il y a plusieurs séries de données, elles s'affichent empilées et non côte-à-côte. |
hatch='/' | Hachuer les barres : '/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*' |
Exemple avec 2 séries de valeurs¶
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau de 50 valeurs comprises entre 0 et 9
valeurs = np.random.randint(0, 10, 50)
# Tableau de 50 valeurs comprises entre 0 et 9
valeurs2 = np.random.randint(0, 10, 50)
# Création d'un tableau avec les intervalles centrés sur la valeur entière
inter = np.linspace(-0.5, 9.5, 11)
plt.hist([valeurs, valeurs2], bins=inter, rwidth=0.8, stacked=True,
label=['Valeurs 1', 'Valeurs 2']) # Création de l'histogramme
plt.xlabel('Valeurs')
plt.xticks(np.arange(0, 10))
plt.ylabel('Nombres')
plt.title("Histogramme")
plt.legend()
plt.show()
Exemple barres horizontales¶
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau de 50 valeurs comprises entre 0 et 9
valeurs = np.random.randint(0, 10, 50)
# Création d'un tableau avec les intervalles centrés sur la valeur entière
inter = [-0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]
plt.hist(valeurs, bins=inter, orientation='horizontal',
rwidth=0.9) # Création de l'histogramme
plt.xlabel('Valeurs')
plt.xticks(np.arange(0, 10))
plt.ylabel('Nombres')
plt.title("Histogramme horizontal")
plt.show()
Exemple décoration des barres¶
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau de 50 valeurs comprises entre 0 et 9
valeurs = np.random.randint(0, 10, 50)
# Création d'un tableau avec les intervalles centrés sur la valeur entière
inter = [-0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5]
plt.hist(valeurs, bins=inter, rwidth=0.8, color='orange',
edgecolor='blue', hatch='/') # Création de l'histogramme
plt.xlabel('Valeurs')
plt.xticks(np.arange(0, 10))
plt.ylabel('Nombres')
plt.title("Histogramme avec hachures")
plt.show()
Histogramme avec étiquettes personnalisées¶
Pour afficher un histogramme associant une valeur avec une étiquette, il faut passer par la fonction ax.bar(...)
.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Préparation de la figure
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])
etiquettes = ['C', 'C++', 'Java', 'Python', 'PHP']
valeurs = [23, 17, 35, 29, 12]
# Affichage des données
ax.bar(etiquettes, valeurs)
plt.title("Histogramme") # Titre du graphique
plt.ylabel('Valeurs') # Titre de l'axe y
plt.xlabel('Langages de programmation')
plt.show() # Affichage d'une courbe
Personnalisation de la couleur de chaque barre¶
Pour personnaliser individuellement chaque couleur, on reprend le paramètre color
, mais on lui passe un tableau de couleur qui correspond à chaque étiquette.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Préparation de la figure
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])
etiquettes = ['C', 'C++', 'Java', 'Python', 'PHP']
valeurs = [23, 17, 35, 29, 12]
# Affichage des données
ax.bar(etiquettes, valeurs, color=[
'red', 'blue', 'orange', 'green', 'gray'], edgecolor="black")
plt.title("Histogramme") # Titre du graphique
plt.ylabel('Valeurs') # Titre de l'axe y
plt.xlabel('Langage de programmation')
plt.show() # Affichage d'une courbe
Autres exemples¶
# Histogramme avec 2 séries
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)]
plt.hist([x1, x2], bins=bins, color=['yellow', 'green'],
edgecolor='red', hatch='/', label=['x1', 'x2'],
histtype='bar') # bar est le defaut
plt.ylabel('Valeurs')
plt.xlabel('Nombres')
plt.title('2 series')
plt.legend()
plt.show()
# Histogrammes superposés avec un effet de transparence
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)]
plt.hist(x1, bins=bins, color='yellow',
edgecolor='red', hatch='/', label='x1')
plt.hist(x2, bins=bins, color='green', alpha=0.5,
edgecolor='blue', hatch='\ ', label='x2')
plt.ylabel('Valeurs')
plt.xlabel('Nombres')
plt.title('Superpose')
plt.legend()
plt.show()
# Histogrammes empilés
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)]
plt.hist([x1, x2], bins=bins, color=['yellow', 'green'],
edgecolor='red', hatch='/', label=['x1', 'x2'],
histtype='barstacked')
plt.ylabel('Valeurs')
plt.xlabel('Nombres')
plt.title('2 series empilées')
plt.legend()
plt.show()