Fonction bar() / barh() de Matplotlib


Matplotlib 参考文档Documentation de référence de Matplotlib

bar()Utilisé pour tracer des diagrammes à barres verticales,barh()Utilisé pour tracer des diagrammes à barres horizontales.

Les diagrammes à barres sont utilisés pour afficher la comparaison quantitative de données catégorielles, où chaque catégorie est représentée par une barre dont la longueur indique sa valeur.

Définition de fonction

bar() - Diagramme à barres verticales

matplotlib.pyplot.bar(x, height, width=0.8, bottom=0, *, align='center',
    **kwargs)

barh() - Diagramme à barres horizontales

matplotlib.pyplot.barh(y, width, height=0.8, left=0, *, align='center',
    **kwargs)

Interface Axes

Axes.bar(x, height, width=0.8, bottom=0, *, align='center', **kwargs)
Axes.barh(y, width, height=0.8, left=0, *, align='center', **kwargs)

Description du paramètre

ParamètreTypeDescription
x / yde type tableauLes coordonnées de position des barres (x pour vertical, y pour horizontal)
height / widthde type tableauLa hauteur (verticale) ou la largeur (horizontale) des barres, c'est-à-dire les valeurs des données
width(bar)/ height(barh)float ou array-likeLa largeur/hauteur des barres, par défaut 0.8
bottom / leftfloat ou array-likeLa position de départ du bas des barres, par défaut 0. Peut être utilisée pour dessiner des graphiques à barres empilées.
alignstrAlignement des barres par rapport aux coordonnées x/y : 'center' (par défaut) ou 'edge'
colorcouleur ou listeCouleur des barres, peut être une couleur unique ou une liste de couleurs
edgecolorcolorCouleur de bordure des barres
linewidth / lwfloatLargeur de bordure des barres
tick_labelde type tableauÉtiquettes de graduation pour les barres, correspondant une à une aux positions x
labelstrÉtiquette de légende (utilisée pour les diagrammes à barres groupées)
alphafloatTransparence
hatchstrMotifs de remplissage : '/', '\\', '|', '-', '+', 'x', 'o', '*'

bar_label() Notes supplémentaires

bar_label()Utilisé pour afficher les étiquettes de valeur directement sur les barres.

Axes.bar_label(container, labels=None, *, fmt=None, label_type='edge',
    padding=0, **kwargs)

bar() et barh() renvoient tous les deux unBarContainerobjet, qui peut être passé à bar_label() pour ajouter des étiquettes de valeur. C'est l'approche recommandée dans Matplotlib 3.4+.


Exemples d'utilisation

Exemple 1 : Diagramme à barres verticales de base

Exemple

import matplotlib.pyplot as plt

# Étiquettes de catégorie et données
categories = ['Python', 'Java', 'JavaScript', 'C++', 'Go']
values = [85, 72, 68, 55, 42]

fig, ax = plt.subplots(layout='constrained')

# Tracer un diagramme à barres
bars = ax.bar(categories, values,
              color=['#3498db', '#e74c3c', '#f39c12', '#2E7DCC', '#9b59b6'],
              edgecolor='white', linewidth=1)

# Afficher les valeurs sur les barres
ax.bar_label(bars, fmt='%d', padding=3)

ax.set_title('Popularité des langages de programmation')
ax.set_ylabel('Score')
ax.set_ylim(0, 100)
ax.grid(axis='y', alpha=0.3)
plt.show()

Exemple 2 : Diagramme à barres groupées

Exemple

import matplotlib.pyplot as plt
import numpy as np

# Données groupées
labels = ['Q1', 'Q2', 'Q3', 'Q4']
product_a = [120, 135, 148, 162]
product_b = [90, 105, 115, 130]

x = np.arange(len(labels))   # positions x : [0, 1, 2, 3]
width = 0.35                  # Largeur de chaque barre

fig, ax = plt.subplots(layout='constrained')

# Premier groupe de barres (décalage -width/2)
bars1 = ax.bar(x - width/2, product_a, width,
               label='Produit A', color='steelblue', edgecolor='white')
# Deuxième groupe de barres (décalage +width/2)
bars2 = ax.bar(x + width/2, product_b, width,
               label='Produit B', color='coral', edgecolor='white')

# Ajouter des étiquettes de valeur
ax.bar_label(bars1, padding=3, fmt='%d')
ax.bar_label(bars2, padding=3, fmt='%d')

ax.set_title('Comparaison des ventes trimestrielles')
ax.set_ylabel('Ventes (unités)')
ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend()
ax.grid(axis='y', alpha=0.3)
plt.show()

Exemple 3 : Diagramme à barres empilées

Exemple

import matplotlib.pyplot as plt

categories = ['Janv.', 'Févr.', 'Mars', 'Avr.', 'Mai']
income = [5000, 5200, 4800, 5500, 6000]
expense = [3000, 3500, 3200, 4000, 4200]

fig, ax = plt.subplots(layout='constrained')

# Première couche de barres (en bas)
bars_income = ax.bar(categories, income,
                     label='Revenu', color='#2E7DCC', edgecolor='white')
# Deuxième couche de barres (empilée au-dessus de la première couche)
bars_expense = ax.bar(categories, expense, bottom=income,
                      label='Dépense', color='#e74c3c', edgecolor='white')

# Ajouter des étiquettes
ax.bar_label(bars_income, label_type='center', fmt='$%d')
ax.bar_label(bars_expense, label_type='center', fmt='$%d')

ax.set_title('Diagramme à barres empilées : Finances mensuelles')
ax.set_ylabel('Montant ($)')
ax.legend()
ax.grid(axis='y', alpha=0.3)
plt.show()

Exemple 4 : Diagramme à barres horizontales (barh)

Exemple

import matplotlib.pyplot as plt

tasks = ['Tâche A', 'Tâche B', 'Tâche C', 'Tâche D', 'Tâche E']
hours = [12.5, 8.0, 15.3, 6.2, 10.8]

fig, ax = plt.subplots(figsize=(8, 4), layout='constrained')

# Diagramme à barres horizontales
bars = ax.barh(tasks, hours,
               color='#3498db', edgecolor='white', height=0.6)

# Ajouter des étiquettes à la fin des barres
ax.bar_label(bars, fmt='%.1f h', padding=5)

ax.set_title('Temps d'achèvement des tâches (barres horizontales)')
ax.set_xlabel('Heures')
ax.invert_yaxis()  # Inverser l'axe y afin que la première catégorie soit en haut
ax.grid(axis='x', alpha=0.3)
plt.show()

FAQ

Quelle est la correspondance des axes pour bar() et barh() ?

bar(x, height): x est la position, height détermine la hauteur de la barre (direction verticale).

barh(y, width): y est la position, width détermine la largeur de la barre (direction horizontale).

Notez les différents noms de paramètres : bar utilise height, barh utilise width pour représenter les valeurs de données.

Comment placer les barres d'un diagramme à barres groupées les unes à côté des autres ?

vawidthDéfinissez-le sur l'inverse de la largeur totale de chaque groupe de barres, et utilisezalign='edge'。


Matplotlib 参考文档Documentation de référence de Matplotlib

Autres extensions