Les subplots Matplotlib permettent d’afficher plusieurs graphiques dans une seule figure. Ce tuto montre comment créer une grille de sous-graphiques, puis comment combiner deux types de graphiques avec deux axes verticaux.
Créer plusieurs tracés dans une seule figure #
Imagine un jeu de données avec l’âge d’une personne, le langage qu’elle utilise et son salaire. Tu veux visualiser l’âge et le salaire des développeurs Python, puis les comparer à ceux des développeurs Java. Tu peux faire deux graphiques, un par cellule du notebook, mais tu dois alors faire des allers-retours pour comparer. Et si tu as quatre choses à comparer, c’est pire !
Pour résoudre ce problème, Matplotlib propose les subplots (sous-graphiques) : plusieurs graphiques dans la même figure. Tu les crées avec plt.subplots(nrows=x, ncols=y) (par défaut, nrows=1 et ncols=1). Cette fonction renvoie deux objets :
fig: la figure entière, que tu utilises pour la styliser globalement (titre commun, taille…) ;axes: les sous-graphiques. Tu traces dans chacun avecaxes[ligne, colonne], où la ligne et la colonne indiquent sa position dans la grille.
Si les sous-graphiques partagent le même axe, utilise les paramètres sharex ou sharey. Voici un exemple avec une grille 2×2 :
import matplotlib.pyplot as plt
import numpy as np
# Données
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.exp(x)
# Grille 2x2 de subplots
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))
# En haut à gauche : axes[0, 0]
axes[0, 0].plot(x, y1, color='blue')
axes[0, 0].set_title('Fonction sinus')
# En haut à droite : axes[0, 1]
axes[0, 1].plot(x, y2, color='green')
axes[0, 1].set_title('Fonction cosinus')
# En bas à gauche : axes[1, 0]
axes[1, 0].plot(x, y3, color='red')
axes[1, 0].set_ylim(-10, 10) # la tangente diverge : on limite l'axe y
axes[1, 0].set_title('Fonction tangente')
# En bas à droite : axes[1, 1]
axes[1, 1].plot(x, y4, color='purple')
axes[1, 1].set_title('Fonction exponentielle')
# Titre commun à tous les subplots
fig.suptitle('Fonctions diverses', fontsize=16)
# Ajuster l'espacement entre les subplots
plt.tight_layout()
plt.show()Python
Combiner différents types de graphiques #
Quand tu compares des graphiques, tu ne veux pas toujours les mêmes axes. Parfois, un axe est commun et l’autre diffère. Tu peux alors combiner plusieurs tracés dans une même figure avec twinx() (axe x partagé, axes y indépendants) ou twiny() (axe y partagé, axes x indépendants).
Par exemple, tu peux combiner un diagramme à barres des ventes et un graphique linéaire des recettes pour visualiser deux jeux de données liés mais d’échelles différentes. Ici, l’axe x (les mois) est commun, mais l’axe y diffère.
# Données
x = np.arange(1, 6)
y1 = np.array([10, 15, 7, 12, 9])
y2 = np.array([200, 300, 150, 250, 180])
# Diagramme à barres sur l'axe de gauche
fig, ax1 = plt.subplots(figsize=(8, 4))
ax1.bar(x, y1, color='b', alpha=0.7, label='Ventes')
ax1.set_xlabel('Mois')
ax1.set_ylabel('Ventes', color='b')
ax1.set_ylim(0, 20) # limites de l'axe y de gauche
# Graphique linéaire sur un second axe y, avec le même axe x
ax2 = ax1.twinx()
ax2.plot(x, y2, color='r', marker='o', label='Recettes')
ax2.set_ylabel('Recettes', color='r')
ax2.set_ylim(0, 400) # limites de l'axe y de droite
# Légende commune
fig.legend(loc='upper left', bbox_to_anchor=(0.15, 0.85))
# Titre
ax1.set_title('Comparaison des ventes et des recettes')
plt.show()Python
La suite de la série porte sur les fonctionnalités avancées de Matplotlib. Documentation : subplots, axes et figures.
Pour aller plus loin, consulte aussi notre guide des 9 bibliothèques Python pour la data science.

