Matplotlib : figure, axes et premier graphique

Première leçon du cours Visualisation (Matplotlib, Seaborn, Plotly), en accès libre : environ 15 minutes, 3 exercices et 3 questions de quiz. C'est la leçon de base du catalogue ; dans l'espace étudiant, elle est réécrite pour ton profil.

Objectifs

  • Créer une figure et des axes avec l'interface orientée objet
  • Tracer une ou plusieurs courbes avec titre, étiquettes d'axes et légende
  • Enregistrer un graphique dans un fichier image

Figure et AxesCourbesTitres, étiquettes et légende

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éthodes ax.*.
  • Titre, étiquettes avec unités, légende : toujours.
  • Courbe pour le temps ; savefig pour 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.

  1. CodeDifficulté 1Python dans le navigateur2 indices

    Courbe annotée

    Créez une figure fig et un axe ax avec plt.subplots(). Tracez ventes en fonction de jours avec 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 = ...
  2. CodeDifficulté 2Python dans le navigateur2 indices

    Comparer deux séries et exporter

    Tracez sur un même axe les séries objectif (trait pointillé "--", label “Objectif”) et realise (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 objet io.BytesIO nommé 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()
  3. QCMDifficulté 11 indice

    Figure ou Axes

    Dans fig, ax = plt.subplots(), quel objet porte le titre du graphique avec set_title ?

    • fig
    • ax
    • plt
    • Les deux indifféremment

Quiz de fin de leçon

  1. Que crée fig, ax = plt.subplots() ?

    • Deux figures
    • Une figure contenant un seul Axes
    • Une figure sans axe
  2. 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
  3. 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

  1. Choisir le bon graphique : barres, histogrammes, nuages de points20 min
  2. Sous-graphiques, mise en forme et annotations20 min
  3. Seaborn : graphiques statistiques depuis un DataFrame20 min
  4. Plotly : graphiques interactifs20 min

Visualisation (Matplotlib, Seaborn, Plotly) · Intermédiaire · 3 h 05