Matplotlib : figure, axes et premier graphique
Matplotlib est la bibliothèque de visualisation historique de Python. Seaborn et pandas l’utilisent en coulisse : comprendre son fonctionnement vous servira partout.
Figure et Axes
Un graphique Matplotlib est organisé en deux niveaux :
- la Figure (
Figure) : la « feuille » qui contient tout ; - un ou plusieurs Axes (
Axes) : des zones de tracé, chacune avec son axe x, son axe y, son titre.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 4)) # une figure de 8 x 4 pouces, un seul Axes
On dessine ensuite en appelant les méthodes de ax. C’est l’interface orientée objet, recommandée. Il existe une interface plus courte (plt.plot(...), plt.title(...)) qui agit sur « l’axe courant » : pratique pour un essai rapide, mais source de confusion dès qu’il y a plusieurs graphiques.
Une première courbe
mois = ["janv", "févr", "mars", "avr", "mai", "juin"]
ca_2025 = [120, 135, 128, 150, 162, 170]
ca_2026 = [130, 142, 155, 149, 175, 190]
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(mois, ca_2025, marker="o", label="2025") # une série
ax.plot(mois, ca_2026, marker="o", linestyle="--", label="2026") # une deuxième
ax.set_title("Chiffre d'affaires mensuel") # titre
ax.set_xlabel("Mois") # étiquette de l'axe x
ax.set_ylabel("CA (k€)") # avec l'unité !
ax.legend() # affiche les labels
ax.grid(alpha=0.3) # grille discrète
plt.show() # dans un notebook, l'affichage est automatique
Chaque appel à ax.plot ajoute une ligne (Line2D) à l’Axes. Le paramètre label donne son nom dans la légende, qui n’apparaît que si l’on appelle ax.legend().
Le style
Les paramètres les plus utiles de plot :
| Paramètre | Exemples | Effet |
|---|---|---|
color |
"tab:blue", "#1f77b4" |
couleur |
marker |
"o", "s", "^" |
symbole sur chaque point |
linestyle |
"-", "--", ":" |
type de trait |
linewidth |
2 |
épaisseur |
ax.set_ylim(0, None) force l’axe y à partir de zéro, ce qui évite d’exagérer visuellement les variations. ax.set(title=..., xlabel=..., ylabel=...) règle plusieurs propriétés en une fois.
Une courbe relie les points : elle suggère une continuité. Réservez-la aux données ordonnées, typiquement le temps. Pour comparer des catégories (régions, produits), on utilisera des barres (leçon suivante).
Enregistrer
fig.savefig("ca_mensuel.png", dpi=150, bbox_inches="tight")
plt.close(fig) # libère la mémoire quand on génère beaucoup de figures
bbox_inches="tight" rogne les marges inutiles ; le format est déduit de l’extension (.png, .svg, .pdf).
Vérifier un graphique par le code
Les objets Matplotlib se laissent interroger, ce qui permet de tester un graphique :
ax.get_title() # "Chiffre d'affaires mensuel"
len(ax.get_lines()) # 2 courbes
[t.get_text() for t in ax.get_legend().get_texts()] # ['2025', '2026']
C’est ainsi que les exercices de ce cours vérifient vos graphiques.
À retenir
fig, ax = plt.subplots()puis des méthodesax.*.- Titre, étiquettes avec unités, légende : toujours.
- Courbe pour le temps ;
savefigpour exporter.
Exercices
Les solutions et les tests restent sur le serveur. Dans l'espace étudiant, ton code est exécuté et corrigé, et le tuteur donne des indices avant la solution.
Courbe annotée
Créez une figure
figet un axeaxavecplt.subplots(). Tracezventesen fonction dejoursavec des marqueurs ronds et le label “Ventes”. Ajoutez le titre “Ventes de la semaine”, les étiquettes “Jour” et “Ventes (unités)”, et la légende.import matplotlib.pyplot as plt jours = ["lun", "mar", "mer", "jeu", "ven"] ventes = [12, 18, 9, 22, 30] fig, ax = ...Comparer deux séries et exporter
Tracez sur un même axe les séries
objectif(trait pointillé"--", label “Objectif”) etrealise(label “Réalisé”). Titre “Objectif vs réalisé”, axe y démarrant à 0 (set_ylim(0, None)), légende. Enregistrez ensuite la figure au format PNG dans un objetio.BytesIOnommébuffer(fig.savefig(buffer, format="png")).import io import matplotlib.pyplot as plt mois = ["janv", "févr", "mars", "avr"] objectif = [100, 110, 120, 130] realise = [95, 118, 112, 141] fig, ax = plt.subplots() ... buffer = io.BytesIO()Figure ou Axes
Dans
fig, ax = plt.subplots(), quel objet porte le titre du graphique avecset_title?- fig
- ax
- plt
- Les deux indifféremment
Quiz de fin de leçon
Que crée
fig, ax = plt.subplots()?- Deux figures
- Une figure contenant un seul Axes
- Une figure sans axe
Pourquoi la légende n’apparaît-elle pas malgré
label="2026"?- Le label est trop court
- ax.legend() n'a pas été appelé
- Il faut deux courbes minimum
Pour quelles données une courbe (plot) est-elle la plus adaptée ?
- Une évolution dans le temps
- Une répartition entre 3 régions
- Une liste de produits sans ordre
La suite du cours
- Choisir le bon graphique : barres, histogrammes, nuages de points20 min
- Sous-graphiques, mise en forme et annotations20 min
- Seaborn : graphiques statistiques depuis un DataFrame20 min
- Plotly : graphiques interactifs20 min