HOWTO · Matplotlib

Comment modifier l'espacement entre les sous-tracés dans Matplotlib

Utilisez tight_layout(), subplots_adjust(), subplot_tool() ou constrained_layout=True pour améliorer l'espacement des figures Matplotlib comportant de nombreuses sous-parcelles.

Sur cette page

Pour rendre plus lisible une figure Matplotlib comportant de nombreux sous-graphiques, choisissez le réglage de mise en page adapté à votre méthode de travail : appelez tight_layout() pour ajuster automatiquement l’espace réservé aux éléments des sous-graphiques, utilisez plt.subplots_adjust() pour définir les espacements et les marges de la figure, ouvrez plt.subplot_tool() pour effectuer des réglages interactifs, ou activez constrained_layout=True lors de la création des sous-graphiques. Ces réglages modifient la mise en page ; si chaque axe a besoin de plus d’espace, vous pouvez aussi augmenter la taille de la figure ou modifier le nombre de lignes et de colonnes.

Utiliser tight_layout() pour éviter le chevauchement des sous-graphiques

Appelez fig.tight_layout() après avoir ajouté les tracés, les étiquettes et les titres. Cette méthode ajuste la position des sous-graphiques pour faire de la place aux éléments tels que les étiquettes d’axes et les titres. C’est un bon premier choix lorsque la disposition par défaut est trop serrée, même si elle ne convient pas à toutes les configurations, notamment lorsque la figure comporte des éléments complexes.

Cet exemple complet crée quatre tracés avec titres dans une grille de deux lignes et deux colonnes, puis applique l’ajustement automatique. Les titres affichés par le code inchangé sont en anglais, notamment « Sine function » et « Cosine function » :

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 3, 100)
series = [
    (np.sin(x), "Sine function"),
    (np.cos(x), "Cosine function"),
    (1 / (1 + np.exp(-x)), "Sigmoid function"),
    (np.exp(x), "Exponential function"),
]

fig, axes = plt.subplots(2, 2)
for ax, (values, title) in zip(axes.flat, series):
    ax.plot(x, values)
    ax.set_title(title)

fig.tight_layout()
plt.show()

Exécutez l’exemple dans un environnement Python où NumPy et Matplotlib sont installés. La mise en page est ajustée après l’ajout des titres et des données tracées.

Définir les espacements et les marges avec plt.subplots_adjust()

Utilisez plt.subplots_adjust() pour contrôler directement les espaces entre les axes ou autour de la grille. wspace définit l’espace horizontal comme une fraction de la largeur moyenne des axes ; hspace définit l’espace vertical comme une fraction de leur hauteur moyenne. Les valeurs left, right, bottom et top définissent les bords de la zone des sous-graphiques sous forme de fractions de la largeur ou de la hauteur de la figure.

L’exemple suivant reprend la même disposition de quatre tracés et augmente l’espace entre les lignes :

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3, 3, 100)
series = [
    (np.sin(x), "Sine function"),
    (np.cos(x), "Cosine function"),
    (1 / (1 + np.exp(-x)), "Sigmoid function"),
    (np.exp(x), "Exponential function"),
]

fig, axes = plt.subplots(2, 2)
for ax, (values, title) in zip(axes.flat, series):
    ax.plot(x, values)
    ax.set_title(title)

fig.subplots_adjust(left=0.12, right=0.95, bottom=0.12, top=0.9, wspace=0.25, hspace=0.4)
plt.show()

Augmentez wspace ou hspace pour élargir l’espace correspondant. Modifiez les quatre valeurs de bord pour réserver davantage de place autour de la grille, par exemple lorsque les étiquettes ont besoin d’espace supplémentaire. Ces réglages contrôlent la disposition des axes dans la figure ; modifiez figsize dans plt.subplots() si la figure entière doit être plus grande.

Régler la disposition des sous-graphiques de manière interactive avec plt.subplot_tool()

plt.subplot_tool() ouvre une fenêtre Matplotlib contenant des commandes pour régler l’espacement et les marges des sous-graphiques. Cet outil est pratique pour ajuster visuellement une figure, puis reporter les réglages choisis dans votre script. Il nécessite un backend Matplotlib interactif et un environnement graphique ; il ne permet pas de modifier une image statique ni une session de tracé sans interface graphique.

Dans une session interactive avec interface graphique, créez la figure, puis appelez plt.subplot_tool(fig) en lui transmettant cette figure. Cet appel dépend d’un gestionnaire de canevas Matplotlib doté d’une barre d’outils associée. Les backends non interactifs, comme celui utilisé pour le rendu sans interface graphique, ne fournissent pas cette barre d’outils : l’outil ne peut donc pas s’y ouvrir. L’exemple interactif n’est volontairement pas présenté comme un script exécutable sans interface graphique.

Utilisez les commandes de l’outil pour modifier les paramètres des sous-graphiques tout en observant la figure. Une fois la disposition satisfaisante, appliquez dans votre code les valeurs correspondantes de wspace, hspace et des marges avec plt.subplots_adjust() afin d’obtenir un résultat reproductible.

Activer constrained_layout=True lors de la création des sous-graphiques

Pour qu’une figure répartisse automatiquement l’espace au moment où elle est dessinée, transmettez constrained_layout=True à l’appel de plt.subplots(). Le moteur de mise en page tient compte des éléments des sous-graphiques, tels que les titres et les étiquettes. Activez cette option lors de la création de la figure. Elle est conçue pour gérer la disposition au fur et à mesure du dessin, mais des éléments complexes peuvent encore nécessiter des réglages manuels. Consultez le guide Matplotlib sur la mise en page contrainte pour en savoir plus.

import numpy as np
import matplotlib.pyplot as plt

a = np.linspace(0, 5, 100)
figure, axes = plt.subplots(2, 2, constrained_layout=True)

axes[0, 0].plot(a, np.exp(a))
axes[0, 1].plot(a, np.sin(a))
axes[1, 0].plot(a, np.cos(a))
axes[1, 1].plot(a, a ** 2)

for index, ax in enumerate(axes.flat, start=1):
    ax.set_title(f"Subplot {index}")

plt.show()

Les quatre approches aident à gérer la disposition des sous-graphiques, mais répondent à des besoins différents : utilisez tight_layout() pour ajuster rapidement la mise en page après avoir ajouté le contenu, plt.subplots_adjust() pour définir des valeurs explicites, plt.subplot_tool() pour effectuer des réglages interactifs et constrained_layout=True lors de la création d’une figure qui doit gérer automatiquement les espacements.