Aide-mémoire Matplotlib
Dernière mise à jour
Figure et axes
Une figure est l'image entière. Un axes est un graphique à l'intérieur, et presque tous les appels ci-dessous sont des méthodes de ax.
| Tâche | Code |
|---|---|
| Importer pyplot | import matplotlib.pyplot as plt |
| Une figure avec un graphique | fig, ax = plt.subplots() |
| Définir la taille en pouces | fig, ax = plt.subplots(figsize=(8, 4)) |
| Dessiner sur les axes | ax.plot(x, y) |
| Afficher la figure | plt.show() |
| Enregistrer en PNG net | fig.savefig("chart.png", dpi=150, bbox_inches="tight") |
| Enregistrer en vectoriel | fig.savefig("chart.svg"), fig.savefig("chart.pdf") |
| Fond transparent | fig.savefig("chart.png", transparent=True) |
| Fermer une figure pour libérer la mémoire | plt.close(fig) |
| Style pyplot rapide pour un seul graphique | plt.plot(x, y)
plt.title("Quick look")
plt.show() |
Types de graphiques
| Tâche | Code |
|---|---|
| Courbe | ax.plot(x, y) |
| Nuage de points | ax.scatter(x, y, s=20, alpha=0.7) |
| Nuage coloré par valeur, avec barre de couleurs | points = ax.scatter(x, y, c=y, cmap="viridis")
fig.colorbar(points, ax=ax) |
| Diagramme en barres | ax.bar(cats, a) |
| Barres horizontales | ax.barh(cats, a) |
| Barres empilées | ax.bar(cats, a, label="2025")
ax.bar(cats, b, bottom=a, label="2026") |
| Barres groupées | pos = np.arange(len(cats))
ax.bar(pos - 0.2, a, width=0.4)
ax.bar(pos + 0.2, b, width=0.4)
ax.set_xticks(pos, labels=cats) |
| Histogramme | ax.hist(data, bins=30) |
| Boîte à moustaches | ax.boxplot([data, data * 2], tick_labels=["A", "B"]) |
| Diagramme en violon | ax.violinplot([data, data * 2]) |
| Camembert | ax.pie([40, 35, 25], labels=cats, autopct="%1.0f%%") |
| Bande entre deux courbes | ax.fill_between(x, y - 0.2, y + 0.2, alpha=0.3) |
| Barres d'erreur | ax.errorbar([1, 2, 3], [4, 5, 3], yerr=[0.5, 0.3, 0.6], fmt="o", capsize=4) |
| Graphique en escalier | ax.step(x, y, where="mid") |
| Heatmap d'un tableau 2D | image = ax.imshow(np.random.default_rng(0).random((5, 5)), cmap="magma")
fig.colorbar(image, ax=ax) |
| Courbes de niveau remplies | X, Y = np.meshgrid(x, x)
ax.contourf(X, Y, np.sin(X) * np.cos(Y), levels=20) |
| Densité de nombreux points | ax.hexbin(data, data + np.random.default_rng(1).normal(size=200), gridsize=20) |
| Ligne de référence horizontale ou verticale | ax.axhline(0, color="gray", linestyle="--"), ax.axvline(5) |
| Ombrer un intervalle | ax.axvspan(2, 4, alpha=0.2) |
Lignes, marqueurs et couleurs
| Tâche | Code |
|---|---|
| Couleur, épaisseur et style de ligne | ax.plot(x, y, color="tab:red", linewidth=2, linestyle="--") |
| Marqueurs sur les points | ax.plot(x, y, marker="o", markersize=4) |
| Chaîne de format courte | ax.plot(x, y, "g--o") |
| Transparence | ax.plot(x, y, alpha=0.5) |
| Styles de ligne | "-", "--", "-.", ":" |
| Codes des marqueurs | "o", "s", "^", "x", ".", "*" |
| Façons de nommer une couleur | "tab:blue", "C1", "#1f77b4", (0.2, 0.4, 0.6) |
| n couleurs d'une colormap | colors = plt.colormaps["viridis"](np.linspace(0, 1, 5)) |
| Ton propre cycle de couleurs | ax.set_prop_cycle(color=["#0b7285", "#e8590c", "#5f3dc4"]) |
| Barres avec contour et hachures | ax.bar(cats, a, color="white", edgecolor="black", hatch="//") |
Titres, libellés et légendes
| Tâche | Code |
|---|---|
| Titre et libellés des axes | ax.set_title("Sales"), ax.set_xlabel("Month"), ax.set_ylabel("EUR") |
| Tout en un seul appel | ax.set(title="Sales", xlabel="Month", ylabel="EUR") |
| Légende à partir des labels | ax.plot(x, y, label="sin")
ax.legend() |
| Position et colonnes de la légende | ax.legend(loc="upper right", ncols=2, frameon=False) |
| Légende hors du graphique | ax.legend(loc="center left", bbox_to_anchor=(1, 0.5)) |
| Texte à une position des données | ax.text(5, 0.5, "note") |
| Annotation avec une flèche | ax.annotate("peak", xy=(1.57, 1), xytext=(3, 1.2), arrowprops=dict(arrowstyle="->")) |
| Valeurs sur les barres | bars = ax.bar(cats, a)
ax.bar_label(bars) |
| Titre de toute la figure | fig.suptitle("Q1 report") |
| Maths dans les libellés | ax.set_xlabel(r"$\alpha$ (rad)") |
Axes, graduations et échelles
| Tâche | Code |
|---|---|
| Limites des axes | ax.set_xlim(0, 10), ax.set_ylim(bottom=0) |
| Échelle logarithmique | ax.set_yscale("log") |
| Choisir les graduations et leurs libellés | ax.set_xticks([0, 5, 10], labels=["start", "middle", "end"]) |
| Faire pivoter les libellés | ax.tick_params(axis="x", labelrotation=45) |
| Quadrillage | ax.grid(True, alpha=0.3) |
| Axe en pourcentage | from matplotlib.ticker import PercentFormatter
ax.yaxis.set_major_formatter(PercentFormatter(1.0)) |
| Séparateur de milliers | ax.yaxis.set_major_formatter("{x:,.0f}") |
| Masquer les bordures haute et droite | ax.spines[["top", "right"]].set_visible(False) |
| Second axe y à droite | ax2 = ax.twinx()
ax2.plot(x, y * 100, color="tab:orange") |
| Même échelle sur les deux axes | ax.set_aspect("equal") |
| Inverser un axe | ax.invert_yaxis() |
| Masquer complètement les axes | ax.axis("off") |
| Dates lisibles sur l'axe | fig.autofmt_xdate() |
Subplots et mise en page
plt.subplots(rows, cols) renvoie un tableau NumPy d'axes. Indexe-le comme un tableau.
| Tâche | Code |
|---|---|
| Grille de graphiques | fig, axs = plt.subplots(2, 2, figsize=(8, 6)) |
| Dessiner sur l'un d'eux | axs[0, 1].plot(x, y) |
| Boucler sur tous | for ax in axs.flat:
ax.grid(True) |
| Partager un axe entre graphiques | fig, axs = plt.subplots(1, 3, sharey=True) |
| Espacement sans chevauchement | fig, axs = plt.subplots(2, 2, layout="constrained") |
| Corriger les chevauchements après le tracé | fig.tight_layout() |
| Colonnes de largeurs différentes | fig, axs = plt.subplots(1, 2, width_ratios=[3, 1]) |
| Mise en page nommée avec un panneau large | fig, axd = plt.subplot_mosaic([["top", "top"], ["left", "right"]])
axd["top"].plot(x, y) |
| Petit graphique dans un graphique | inset = ax.inset_axes([0.6, 0.6, 0.35, 0.35]) |
| Masquer un panneau vide | axs[0].axis("off") |
Styles et réglages par défaut
| Tâche | Code |
|---|---|
| Utiliser un style intégré | plt.style.use("ggplot") |
| Lister les styles | plt.style.available |
| Look seaborn sans seaborn | plt.style.use("seaborn-v0_8-whitegrid") |
| Style pour une seule figure | with plt.style.context("dark_background"):
fig, ax = plt.subplots() |
| Taille de police par défaut | plt.rcParams["font.size"] = 12 |
| Taille et résolution par défaut des figures | plt.rcParams["figure.figsize"] = (8, 4), plt.rcParams["figure.dpi"] = 120 |
| Revenir aux réglages par défaut | plt.style.use("default") |
| Colormaps courantes : séquentielle, divergente, gris | "viridis", "coolwarm", "Greys" |
Tracer depuis pandas
pandas trace avec Matplotlib. Passe ax= pour dessiner dans tes propres axes, ou garde le ax que pandas renvoie.
| Tâche | Code |
|---|---|
| Colonnes d'un DataFrame dans tes axes | df.plot(x="month", y="sales", ax=ax) |
| Barres d'un résumé par groupe | df.groupby("city")["sales"].sum().plot.bar(ax=ax) |
| Personnaliser ce que pandas a tracé | ax = df.plot(x="month", y="sales")
ax.set_title("Sales") |
| Colonnes directement dans Matplotlib | ax.plot(df["month"], df["sales"]) |
Matplotlib 3.11 : anciennes syntaxes et quoi écrire maintenant
Le code copié d'anciens tutoriels peut échouer ou déclencher des avertissements avec Matplotlib 3.11. Écris plutôt la version de la colonne Matplotlib 3.11.
| Tâche | Matplotlib 3.11 | Ancienne syntaxe |
|---|---|---|
| Libellés d'une boîte à moustaches | ax.boxplot([data, data * 2], tick_labels=["A", "B"]) | labels=["A", "B"] |
| Boîte ou violon horizontal | ax.boxplot(data, orientation="horizontal") | vert=False |
| Récupérer une colormap | plt.colormaps["viridis"] | plt.cm.get_cmap("viridis") |
| Style seaborn | plt.style.use("seaborn-v0_8") | plt.style.use("seaborn") |
Le code Matplotlib dont tu as besoin pour transformer des données en graphique clair, classé par tâche : figure et axes, types de graphiques, lignes et couleurs, titres et légendes, axes et graduations, subplots et mise en page, styles, et tracés depuis pandas. Chaque ligne donne un court extrait à copier-coller, avec une phrase qui explique ce qu'il fait.
Tout utilise le style orienté objet (fig, ax = plt.subplots(), puis des méthodes sur ax) et est écrit pour Matplotlib 3.11, la version utilisée par Coddy. Les anciennes syntaxes comme labels= dans boxplot n'apparaissent que dans le dernier tableau, à côté de ce qu'il faut écrire à la place. Les exemples utilisent x = np.linspace(0, 10, 50), y = np.sin(x) et un échantillon de valeurs normales appelé data. Tu débutes en Python ? Commence par l'aide-mémoire Python, et garde les aide-mémoire pandas, NumPy et scikit-learn à portée de main.
FAQ de l'aide-mémoire Matplotlib
Cet aide-mémoire Matplotlib est-il gratuit ?
Quelle est la différence entre plt et ax ?
plt.plot() dessine sur les axes courants, ce qui est rapide pour un seul graphique. fig, ax = plt.subplots() te donne la figure et les axes sous forme d'objets, donc ax.plot() dessine toujours exactement là où tu veux. Utilise le style ax dès qu'il y a plus d'un graphique, et pour le code que tu comptes garder.Comment changer la taille de la figure ?
figsize en pouces quand tu crées la figure : fig, ax = plt.subplots(figsize=(10, 5)). Pour changer la valeur par défaut de toutes les figures, définis plt.rcParams["figure.figsize"] = (10, 5). La taille en pixels d'un fichier enregistré vaut figsize multiplié par dpi.Comment enregistrer un graphique en haute résolution ?
fig.savefig("chart.png", dpi=300, bbox_inches="tight"). Un dpi plus élevé donne un PNG plus net, et bbox_inches="tight" supprime les marges vides. Pour l'impression ou des slides, enregistre en SVG ou en PDF, qui restent nets à toutes les tailles.Pourquoi les titres et libellés de mes subplots se chevauchent-ils ?
layout="constrained", comme dans plt.subplots(2, 2, layout="constrained"), et Matplotlib fait de la place pour les titres, les libellés et les barres de couleurs. Sur une figure existante, appelle fig.tight_layout() après le tracé.Quelle version de Matplotlib cet aide-mémoire couvre-t-il ?
labels= dans boxplot (désormais tick_labels=) et plt.cm.get_cmap (désormais plt.colormaps[...]), figurent dans le dernier tableau, à côté de ce qu'il faut écrire à la place.