Matplotlib Diagramme en Barres : Guide Complet de plt.bar() et plt.barh()
Updated on
Les diagrammes en barres sont le moyen le plus courant de comparer des quantités entre catégories. Chiffre d'affaires par trimestre, scores par étudiant, comptages par statut -- les diagrammes en barres rendent ces comparaisons instantanément lisibles. Mais créer des diagrammes en barres efficaces dans Matplotlib nécessite plus qu'un simple appel à plt.bar(). Vous devez gérer les comparaisons groupées, les compositions empilées, les dispositions horizontales pour les longues étiquettes et les annotations appropriées qui rendent les graphiques auto-explicatifs.
Ce guide couvre chaque modèle de diagramme en barres dont vous aurez besoin dans Matplotlib, des barres verticales basiques aux configurations groupées et empilées avancées.
Diagramme en Barres Vertical Basique
import matplotlib.pyplot as plt
categories = ['Python', 'JavaScript', 'Java', 'C++', 'Go']
values = [35, 28, 22, 15, 12]
plt.figure(figsize=(8, 5))
plt.bar(categories, values, color='steelblue', edgecolor='black', linewidth=0.5)
plt.xlabel('Langage')
plt.ylabel('Score de Popularité')
plt.title('Popularité des Langages de Programmation')
plt.show()Diagramme en Barres Horizontal avec plt.barh()
Utilisez des barres horizontales lorsque les étiquettes de catégorie sont longues ou lorsque vous avez beaucoup de catégories :
import matplotlib.pyplot as plt
frameworks = ['React', 'Vue.js', 'Angular', 'Svelte', 'Next.js',
'Django', 'Flask', 'FastAPI', 'Express', 'Rails']
stars = [220, 207, 95, 78, 124, 78, 67, 74, 64, 55]
plt.figure(figsize=(10, 6))
plt.barh(frameworks, stars, color='#3498db', edgecolor='white')
plt.xlabel('Étoiles GitHub (milliers)')
plt.title('Popularité des Frameworks par Étoiles GitHub')
plt.gca().invert_yaxis() # Plus élevé en haut
plt.tight_layout()
plt.show()Personnalisation des Couleurs
import matplotlib.pyplot as plt
categories = ['T1', 'T2', 'T3', 'T4']
revenue = [120, 150, 180, 200]
# Couleur différente par barre
colors = ['#e74c3c', '#f39c12', '#2ecc71', '#3498db']
plt.figure(figsize=(8, 5))
bars = plt.bar(categories, revenue, color=colors, edgecolor='black', linewidth=0.5)
plt.ylabel('Chiffre d\'affaires ($K)')
plt.title('Chiffre d\'affaires Trimestriel')
plt.show()Ajouter des Étiquettes de Valeur sur les Barres
import matplotlib.pyplot as plt
categories = ['A', 'B', 'C', 'D', 'E']
values = [23, 45, 56, 78, 32]
plt.figure(figsize=(8, 5))
bars = plt.bar(categories, values, color='steelblue')
# Ajouter des étiquettes de valeur au-dessus de chaque barre
for bar, val in zip(bars, values):
plt.text(bar.get_x() + bar.get_width() / 2, bar.get_height() + 1,
str(val), ha='center', va='bottom', fontsize=11)
plt.ylabel('Valeur')
plt.title('Diagramme en Barres avec Étiquettes de Valeur')
plt.show()Diagramme en Barres Groupé
Comparez plusieurs séries côte à côte :
import matplotlib.pyplot as plt
import numpy as np
categories = ['T1', 'T2', 'T3', 'T4']
product_a = [20, 35, 30, 35]
product_b = [25, 32, 34, 20]
product_c = [15, 20, 25, 30]
x = np.arange(len(categories))
width = 0.25
plt.figure(figsize=(10, 6))
plt.bar(x - width, product_a, width, label='Produit A', color='#e74c3c')
plt.bar(x, product_b, width, label='Produit B', color='#3498db')
plt.bar(x + width, product_c, width, label='Produit C', color='#2ecc71')
plt.xlabel('Trimestre')
plt.ylabel('Ventes ($K)')
plt.title('Ventes Trimestrielles par Produit')
plt.xticks(x, categories)
plt.legend()
plt.tight_layout()
plt.show()Diagramme en Barres Empilé
Montrez la composition de chaque catégorie :
import matplotlib.pyplot as plt
quarters = ['T1', 'T2', 'T3', 'T4']
mobile = [30, 35, 40, 45]
desktop = [50, 45, 35, 30]
tablet = [20, 20, 25, 25]
plt.figure(figsize=(8, 6))
plt.bar(quarters, mobile, label='Mobile', color='#3498db')
plt.bar(quarters, desktop, bottom=mobile, label='Bureau', color='#e74c3c')
# Pour la troisième pile, calculer le fond cumulé
import numpy as np
bottom_2 = np.array(mobile) + np.array(desktop)
plt.bar(quarters, tablet, bottom=bottom_2, label='Tablette', color='#2ecc71')
plt.ylabel('Trafic (%)')
plt.title('Sources de Trafic par Trimestre')
plt.legend()
plt.show()Barres d'Erreur
import matplotlib.pyplot as plt
import numpy as np
categories = ['Contrôle', 'Traitement A', 'Traitement B', 'Traitement C']
means = [10.2, 15.8, 14.3, 18.1]
errors = [1.2, 2.1, 1.8, 2.5]
plt.figure(figsize=(8, 5))
plt.bar(categories, means, yerr=errors, capsize=5,
color='steelblue', edgecolor='black', linewidth=0.5)
plt.ylabel('Valeur de Réponse')
plt.title('Effets du Traitement avec Barres d\'Erreur')
plt.show()Référence des Paramètres de plt.bar()
| Paramètre | Type | Description |
|---|---|---|
x | type tableau | Positions des barres (catégories) |
height | type tableau | Hauteurs des barres (valeurs) |
width | float | Largeur de barre (défaut 0.8) |
bottom | type tableau | Coordonnée Y de la base des barres (pour empiler) |
color | couleur ou tableau | Couleur(s) de remplissage des barres |
edgecolor | couleur | Couleur du bord des barres |
linewidth | float | Largeur de la ligne de bord |
yerr / xerr | type tableau | Tailles des barres d'erreur |
capsize | float | Largeur du capuchon des barres d'erreur |
align | str | Alignement des barres ('center' ou 'edge') |
label | str | Étiquette de légende |
alpha | float | Transparence (0-1) |
Diagrammes en Barres Interactifs avec PyGWalker
Pour l'analyse exploratoire des données, PyGWalker (opens in a new tab) vous permet de créer des diagrammes en barres interactifs en glissant-déposant des colonnes de votre DataFrame dans Jupyter :
import pandas as pd
import pygwalker as pyg
df = pd.DataFrame({
'Quarter': ['T1', 'T2', 'T3', 'T4'] * 3,
'Product': ['A'] * 4 + ['B'] * 4 + ['C'] * 4,
'Sales': [20, 35, 30, 35, 25, 32, 34, 20, 15, 20, 25, 30]
})
walker = pyg.walk(df)FAQ
Comment créer un diagramme en barres dans Matplotlib ?
Utilisez plt.bar(catégories, valeurs) pour les barres verticales ou plt.barh(catégories, valeurs) pour les barres horizontales. Passez des listes ou des tableaux pour les catégories et leurs valeurs correspondantes. Ajoutez plt.xlabel(), plt.ylabel() et plt.title() pour les étiquettes.
Comment créer un diagramme en barres groupé ?
Utilisez np.arange() pour les positions x et décalez chaque groupe par la largeur de barre. Appelez plt.bar() plusieurs fois avec des positions x décalées : plt.bar(x - width, data1, width), plt.bar(x, data2, width), etc. Définissez les étiquettes d'axe avec plt.xticks(x, catégories).
Comment ajouter des étiquettes de valeur au-dessus des barres ?
Itérez sur les objets barre et utilisez plt.text(). Pour chaque barre, calculez la position x centrale avec bar.get_x() + bar.get_width() / 2 et la position y avec bar.get_height(). Utilisez ha='center' pour l'alignement horizontal.
Comment créer un diagramme en barres empilé ?
Utilisez le paramètre bottom dans les appels successifs à plt.bar(). Le premier appel n'a pas de bottom. Le deuxième appel utilise le premier jeu de données comme bottom. Pour une troisième pile, additionnez les deux premiers jeux de données comme bottom.
Quand utiliser des diagrammes en barres horizontaux vs verticaux ?
Utilisez des barres horizontales (plt.barh()) quand les étiquettes de catégorie sont longues, quand vous avez beaucoup de catégories (plus de 8-10), ou quand vous comparez à une ligne de base. Utilisez des barres verticales (plt.bar()) pour les catégories de séries temporelles (mois, trimestres) ou quand vous avez peu de catégories avec des étiquettes courtes.
Conclusion
Les plt.bar() et plt.barh() de Matplotlib couvrent tous les besoins en diagrammes en barres : comparaisons basiques, multi-séries groupées, compositions empilées et présentations annotées. Pour les barres groupées, décalez les positions x avec np.arange(). Pour les barres empilées, utilisez le paramètre bottom. Ajoutez toujours des étiquettes de valeur pour la clarté et choisissez la disposition horizontale quand les étiquettes sont longues.