Aller au contenu
FR EN
Contact
Tous les articles

Visualiser ses données avec Python : Plotly vs Matplotlib

Data Science 5 min

« Quelle bibliothèque dois-je utiliser ? » est la question que posent presque tous les étudiants qui découvrent la visualisation en Python. La bonne réponse n’est pas un nom, mais une autre question : où votre graphique sera-t-il lu ? Sur une page imprimée, dans un mémoire, dans un tableau de bord partagé avec une direction ? Matplotlib et Plotly répondent à des besoins différents parce qu’ils reposent sur des conceptions différentes de ce qu’est une figure.

Objectifs d’apprentissage

  • distinguer une figure statique (une image) d’une figure interactive (un programme exécuté dans le navigateur) ;
  • comprendre la notion de backend chez Matplotlib, et la différence entre formats matriciels et vectoriels ;
  • produire le même graphique avec les deux bibliothèques et l’exporter correctement ;
  • choisir l’outil adapté à une situation de communication donnée.

1. Deux conceptions de la figure

1.1 Matplotlib : dessiner une image

Matplotlib, la bibliothèque historique de l’écosystème scientifique Python, dessine. Le résultat final est une image, produite par un moteur de rendu qu’on appelle un backend. La documentation distingue deux familles :

  • les backends interactifs, qui affichent la figure dans une fenêtre (Qt, Tkinter, macOS) ;
  • les backends non interactifs, qui écrivent un fichier : Agg pour les images matricielles (PNG), et des backends vectoriels pour PDF, SVG et PS/EPS.

La distinction matriciel / vectoriel est essentielle pour un document académique. Une image matricielle est une grille de pixels : agrandie, elle devient floue. Une image vectorielle décrit des formes géométriques : elle reste nette à toute échelle et son texte reste sélectionnable. Pour un article ou un mémoire, préférez le PDF ou le SVG.

1.2 Plotly : décrire une figure, laisser le navigateur l’afficher

Plotly procède autrement. En Python, on construit une description de la figure (une structure de données qui liste les tracés, les axes, les légendes). Cette description est ensuite rendue par la bibliothèque JavaScript plotly.js dans un navigateur. D’où l’interactivité native : zoom, survol avec info-bulles, masquage d’une série d’un clic sur la légende.

2. Exemple guidé : le même graphique, deux fois

Prenons l’évolution du nombre de candidats à un concours sur cinq sessions (données fictives, à visée d’illustration).

2.1 Avec Matplotlib (interface orientée objet)

import matplotlib.pyplot as plt

annees = [2022, 2023, 2024, 2025, 2026]
candidats = [412, 538, 601, 744, 820]

fig, ax = plt.subplots(figsize=(6, 3.5))
ax.plot(annees, candidats, marker="o")
ax.set_title("Candidats au concours d'entrée")
ax.set_xlabel("Session")
ax.set_ylabel("Nombre de candidats")
ax.set_xticks(annees)
ax.grid(alpha=0.3)

fig.savefig("candidats.pdf")              # vectoriel, pour le mémoire
fig.savefig("candidats.png", dpi=200)     # matriciel, pour une diapositive

Remarquez deux habitudes à prendre. D’abord, l’interface orientée objet (fig, ax = plt.subplots()) plutôt que les appels globaux plt.plot() : on sait toujours sur quel graphique on agit, ce qui devient indispensable dès qu’une figure contient plusieurs panneaux. Ensuite, savefig déduit le format de l’extension du fichier ; le paramètre dpi fixe la résolution des images matricielles.

2.2 Avec Plotly Express

import plotly.express as px

fig = px.line(
    x=[2022, 2023, 2024, 2025, 2026],
    y=[412, 538, 601, 744, 820],
    markers=True,
    labels={"x": "Session", "y": "Nombre de candidats"},
    title="Candidats au concours d'entrée",
)

fig.write_html("candidats.html", include_plotlyjs="cdn")  # interactif
fig.write_image("candidats.svg")                           # statique

Deux exports, deux usages. write_html produit une page autonome ; l’option include_plotlyjs décide si la bibliothèque JavaScript est intégrée au fichier (lourd, mais lisible hors connexion) ou chargée depuis un CDN (léger, mais nécessite Internet). write_image produit une image statique en PNG, JPEG, WebP, SVG ou PDF ; il nécessite le paquet Kaleido (version 1.0.0 ou ultérieure selon la documentation actuelle de Plotly).

3. Tableau de décision

Situation Choix conseillé Pourquoi
Figure d’article, de thèse ou de mémoire Matplotlib Contrôle fin de la typographie et export vectoriel PDF ou SVG
Tableau de bord partagé, exploration par le lecteur Plotly Zoom, info-bulles et filtres sans code supplémentaire
Très grand nombre de points Matplotlib Une image reste légère ; un graphique interactif doit transporter toutes les données dans le navigateur
Rapport HTML envoyé à une direction Plotly Un seul fichier, lisible dans n’importe quel navigateur
Diapositive de cours Les deux PNG haute résolution avec Matplotlib, ou image statique exportée de Plotly

4. Au-delà de l’outil : les règles d’un bon graphique

Quelle que soit la bibliothèque, un graphique pédagogique respecte quelques règles simples :

  • un titre qui dit ce qu’il faut voir, pas seulement ce qui est mesuré : « Les candidatures ont doublé en cinq ans » plutôt que « Candidatures » ;
  • des axes nommés avec leurs unités ;
  • des couleurs lisibles par tous, y compris les personnes daltoniennes, et jamais la couleur comme seul porteur d’information ;
  • pas d’effets inutiles : la 3D décorative et les ombres déforment la lecture des valeurs.

Erreurs fréquentes

  • Insérer une capture d’écran floue d’un graphique dans un mémoire, au lieu d’un export vectoriel.
  • Mélanger appels plt. globaux et objets ax dans une même figure.
  • Envoyer un fichier HTML Plotly configuré avec le CDN à un lecteur qui l’ouvrira sans connexion.
  • Choisir l’interactivité par principe, alors que le lecteur imprimera le rapport.

À retenir

Matplotlib produit des images pour être lues ; Plotly produit des applications pour être explorées. Choisissez selon le support de lecture, puis soignez le message du graphique, qui compte plus que l’outil.

Références

Votre retour d'expérience nous intéresse

Avez-vous fait d'autres choix ? Rencontré d'autres difficultés ? Partagez votre expérience ou vos questions en commentaire : nous lisons et répondons à chaque message.

Laisser un commentaire

Besoin d'une application métier sur mesure ?

Plateforme de concours, gestion des personnels, assistant IA, e-learning : nous concevons, déployons et maintenons des applications adaptées à votre structure.

Parlons de votre projet

Commentaires

Aucun commentaire pour le moment : soyez le premier à partager votre expérience.

Laisser un commentaire

Votre premier commentaire est relu avant publication. Merci de rester courtois et constructif.

Un email par semaine, zéro bruit

Nos regards sur le Dev, la Data Science et l'IA, tirés de nos projets. Désabonnement en un clic.

Vos données ne sont ni revendues ni partagées. Politique de confidentialité