Skip to content

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ètreTypeDescription
xtype tableauPositions des barres (catégories)
heighttype tableauHauteurs des barres (valeurs)
widthfloatLargeur de barre (défaut 0.8)
bottomtype tableauCoordonnée Y de la base des barres (pour empiler)
colorcouleur ou tableauCouleur(s) de remplissage des barres
edgecolorcouleurCouleur du bord des barres
linewidthfloatLargeur de la ligne de bord
yerr / xerrtype tableauTailles des barres d'erreur
capsizefloatLargeur du capuchon des barres d'erreur
alignstrAlignement des barres ('center' ou 'edge')
labelstrÉtiquette de légende
alphafloatTransparence (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.

📚