Créer des diagrammes en barres avec Matplotlib
Objectif pédagogique : Apprendre à créer et personnaliser des graphiques en barres pour visualiser des données quantitatives.
À la fin de ce chapitre, tu seras capable de…
- Créer des diagrammes en barres simples avec plt.bar
- Personnaliser l’apparence des barres avec couleurs et paramètres
- Afficher plusieurs séries de données en barres groupées ou empilées
- Appliquer les barplots à l’analyse de données réelles
- Configurer les axes et légendes pour des graphiques professionnels
💡 Prérequis : Maîtriser les bases de Python, Pandas pour la manipulation de DataFrames, et les concepts fondamentaux de Matplotlib
Mise en contexte
Vous voulez transformer vos données en visualisations percutantes ? Les diagrammes en barres sont parfaits pour comparer des quantités, analyser des tendances par catégorie ou visualiser des distributions. Vous apprendrez à créer des barplots professionnels pour analyser des réservations de véhicules par mois, comparer différents types de données, et même superposer plusieurs séries pour des analyses approfondies.
1 – Barplots
La fonction plt.bar permet de tracer des diagrammes en barres, verticaux avec une seule ou plusieurs séries de valeurs. Pour afficher un bar plot il suffit d’entrer dans la fonction en premier argument les positions de l’axe des abscisses sur lesquelles les barres seront centrées, et en second argument les hauteurs des barres.
Les paramètres supplémentaires les plus importants sont: la couleur de l’intérieur des barres (color) et la largeur relative de chaque barre (width par défaut 0.8, c’est à dire 20% d’espace vide entre chaque barre).
Exemple de création d’un bar plot
plt.bar(range(5), [4, 5, 6, 7, 9] , color = ‘green’, width = 0.6)

Comme toutes les fonctions de pyplot il existe beaucoup d’autres paramètres comme :
- edgecolor : la couleur des encadrements.
- linewidth : l’épaisseur des traits.
- yerr : les valeurs des barres d’erreur.
- ecolor : la couleur des barres d’erreur.
- align: l’axe des abscisses correspond au centre de la barre , ou au bord gauche.
- orientation : ‘horizontal’ pour afficher un barplot horizontal.
- hatch = ‘/’ : les hachures. Valeurs possibles : ‘/’, ‘\’, ‘|’, ‘-‘, ‘+’, ‘x’, ‘o’, ‘O’, ‘.’, ‘*’.
Exemple :
Créer un bar plot avec les abscisses de 0 à 8 et les hauteurs [3, 5, 6, 7, 8, 7, 6, 5, 3], d’épaisseur 0.9 et de couleur bleue.

« `html
Exercice
- Télécharger le fichier csv ‘reservations.csv’ ici et importer le sous forme de DataFrame nommé df_reservations et afficher les 5 premières lignes du dataframe et une description du dataframe.
- Afficher le nombre de véhicules reservés de type SUV par mois, sous forme de barplot.
df_reservations = pd.read_csv('reservations.csv')
print(df_reservations.head())
# Filtrer uniquement les véhicules de type SUV
df_reservations_suv=df_reservations[df_reservations['type_vehicule']=='SUV']
# Compter le nombre de SUV réservés par mois
suv_par_mois = df_reservations_suv.groupby('month').size()
# size() compte le nombre de lignes dans chaque groupe
# Pour s'assurer que tous les mois sont présents (même ceux sans réservation)
suv_par_mois = suv_par_mois.reindex(range(1, 13), fill_value=0)
# Créer les noms des mois
noms_mois = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre']
bars = plt.bar(
noms_mois, suv_par_mois.values, color='b',
edgecolor='red', linewidth=1.2, alpha=0.8
)
plt.xticks(range(len(noms_mois)), noms_mois, rotation=45, ha='right')
plt.xlabel('Mois')
plt.ylabel('Nombre de SUV loués');
« `

Il est possible d’afficher plusieurs diagrammes sur le même graphique, en faisant appel à autant de commandes plt.bar les unes à la suite des autres.
Comme pour la méthode plot, il est possible de donner un label à un barplot en le précisant en argument, pour pourvoir afficher les légendes.
- Créer un graphique affichant deux bar plots, un bleu et un vert, labellisés « Exemple 1 » et « Exemples 2 » avec pour arguments respectifs les listes [1,3,5,7,9], [5,2,7,8,2] et [2,4,6,8,10], [8,6,2,5,6] .
- Donner à l’axe des abscisses le label ‘Numéro’, et à l’axe des ordonnées le label ‘Hauteur’.
- Afficher les légendes et donner au graphique le titre ‘Mon graphique en barres’.
plt.bar([1, 3, 5, 7, 9], [5, 2, 7, 8, 2], color=’b’, label = ‘Exemple 1’);
plt.bar([2, 4, 6, 8, 10], [8, 6, 2, 5, 6], color=’g’, label = ‘Exemple 2’);
plt.xlabel(‘Nombre’)
plt.ylabel(‘Hauteur’)
plt.legend()
plt.title(‘Exemple de graphique en barres’);

« `html
Il est également possible de créer un bar plot à partir de 2 séries de valeurs, superposées l’une sur l’autre, en rajoutant le paramètre bottom au deuxième appel plt.bar().
Exemple:
plt.bar(x , y1);
plt.bar(x, y2, bottom = y1)
superpose la série y2 sur y1.
- Afficher l’un au dessus de l’autre, le nombre de véhicules reservés de type SUV par mois et le nombre de véhicules de type Citadine par mois. Ajouter des légendes.
# Filtrer les véhicules de typeCitadine
df_citadine = df_reservations[df_reservations[‘type_vehicule’] == ‘Citadine’]
# Compter le nombre de réservations par mois pour le type Citadine
citadine_par_mois = df_citadine.groupby(‘month’).size()
plt.bar(noms_mois, suv_par_mois, label = « SUV »)
plt.bar(noms_mois, citadine_par_mois, bottom = suv_par_mois, label = « Citadine »)
plt.legend();
« `

Si l’on préfère obtenir un graphique avec des barres côte à côte et non empilées, il suffit de jouer avec les abscisses des barres et leur épaisseur. Il est également possible, avec tout graphique, de modifier les graduations des axes grâce aux méthodes xticks et yticks.
plt.xticks([1,2,3], ['un', 'deux', 'trois']) remplace les graduations de l’axe des abscisses par les trois graduations ‘un’, ‘deux’, ‘trois’.Étapes à suivre
- Créer une variable appelée barWidth qui vaut 0.4
- Créer une séquence x1 des chiffres de 0 à 11
- Créer une liste x2 dont les éléments sont les éléments de x1 additionnés de barWidth
- Créer dans la même figure, 2 bar plots, d’abscisses respectives x1 et x2 et d’épaisseur barWidth, et affichant le nombre de véhicules de type SUV et Citadine loués par mois.
- Afficher sur l’axe des abscisses uniquement les mois suivants : ‘Janvier’, ‘Mars’, ‘Mai’, ‘Juillet’, ‘Septembre’, ‘Decembre’.
barWidth = 0.4
x1 = range(12)
x2 = [r + barWidth for r in x1]
plt.bar(x1, suv_par_mois, width = barWidth, label = « SUV »)
plt.bar(x2, citadine_par_mois, width = barWidth, label = « Citadine »)
plt.xticks([0, 2, 4, 6, 8, 11], [‘Janvier’, ‘Mars’, ‘Mai’, ‘Juillet’, ‘Septembre’, ‘Decembre’])
plt.legend();

Par défaut, les barres sont affichées côte à côtes, mais il est possible d’utiliser l’argument stacked = True, pour les empiler. Il faut noter que cette méthode, bien que très efficace, permet moins de personnalisation dans les détails et le choix des paramètres, elle est donc conseillée pour la production de graphiques rapides et simples.
Exemple :
|
1
|
Créer le dataframe df_suv_citadine avec les 3 colonnes ‘noms_mois’, ‘suv_par_mois’ et ‘citadine_par_mois’. |
df_suv_citadine = pd.DataFrame({
‘noms_mois’: noms_mois,
‘suv_par_mois’: suv_par_mois.values,
‘citadine_par_mois’: citadine_par_mois.values
})
|
2
|
Afficher l’un au dessus de l’autre, le nombre de véhicules reservés de type SUV par mois et le nombre de véhicules de type Citadine par mois en utilisant l’argument stacked = True |

2 – Nuages de points (Scatter plots)
La fonction scatter permet de tracer des nuages de points. Elle s’utilise d’une manière similaire à plot.
Exemple :
plt.scatter(range(0, 7), [9, 8, 7, 6, 7, 8, 9], color=’red’, marker= ‘*’, s=40)
produit le graphique :

Il est possible également de tracer deux nuages de points simultanément sur le même graphique en faisant deux fois appel à la commande plt.scatter l’une après l’autre.
Les paramètres c (pour la couleur) et s (pour la taille) peuvent être :
- Soit des éléments uniques (c = ‘red’)
- Soit des listes de la même taille que le nombre de points (c = [‘red’, ‘green’, ‘blue’] si 3 points par exemple).
La liste de couleurs disponibles sur Matplotlib pourrait sembler restreinte pour certains, il est possible d’utiliser des codes couleurs HEX pour colorer tout type de graphique.
- Créer la listes x des abscisses de 1 à 5, puis les listes y1 et y2 suivantes: [0,2, 3, 8, 15], [5, 8, 11, 16, 22].
- Représenter les points de coordonnées x* et y1 en jaune et de tailles croissantes: 30, 60, 90, 120, 150.
- Représenter les points de coordonnées x et y2, de taille 40 et de couleurs: [#d248a2′, ‘#8b48d2’, ‘#48a5d2’, ‘#4dd248’, ‘#d1d248’].

Lorsque l’on travaille avec des dataframes, le paramètre c permet de colorer les points par rapport aux valeurs prises par les points dans une colonne, en insérant cette colonne en argument au paramètre c.
- Créer une colonne ‘mois_num’ dans le datafrale df_suv_citadine contenant les mois convertits en leur numéro correspondant
- Afficher un nuage de points d’abscisses suv_par_mois et d’ordonnées df_suv_citadine.citadine_par_mois, de taille 30, et en colorant les points par rapport à df_suv_citadine.noms_num.
Créer la colonne ‘mois_num’ contenant les numéros de mois (1-12)
df_suv_citadine[‘mois_num’] = range(1, 13)
df_suv_citadine.plot.scatter(
x=’suv_par_mois’,
y=’citadine_par_mois’,
c = ‘mois_num’,
s=30,
cmap=’viridis’
);
