Retour au catalogue
Season 36 5 Épisodes 17 min 2026

Matplotlib

v3.10 — Édition 2026. Un cours audio complet sur Matplotlib, la bibliothèque de visualisation la plus populaire de Python. Découvrez l'identité fondamentale, le cycle de vie d'un graphique, les mises en page avancées, les types de graphiques et les workflows pour utilisateurs avancés de la version 3.10.

Visualisation de données Science des données
Matplotlib
Lecture en cours
Click play to start
0:00
0:00
1
L'identité fondamentale : Figures, Axes et Interfaces
Bienvenue dans Matplotlib. Dans cet épisode, nous définissons le modèle mental au cœur de la bibliothèque de visualisation la plus populaire de Python. Apprenez la différence entre une Figure et un Axes, et pourquoi l'interface explicite Object-Oriented est votre meilleur outil.
3m 13s
2
Le cycle de vie d'un graphique
Découvrez comment faire passer un graphique de données brutes à un affichage formaté et étiqueté. Nous parcourons le cycle de vie d'un graphique simple, en vous montrant exactement comment ajouter des étiquettes, des titres et des tick formatters personnalisés en utilisant l'interface explicite.
3m 23s
3
Maîtriser les mises en page : Subplots et Mosaics
Apprenez à gérer plusieurs graphiques sur un seul canevas sans qu'ils ne se chevauchent. Cet épisode couvre plt.subplots, la puissance de subplot_mosaic pour les mises en page sémantiques, et l'utilisation du constrained layout pour garder les choses en ordre.
3m 41s
4
Au-delà de la ligne : Exploration des principaux types de graphiques
Allez au-delà des lignes basiques et des scatter plots. Nous cartographions les catégories de graphiques de Matplotlib, en opposant les graphiques de distribution statistique aux fonctions de données quadrillées comme imshow et pcolormesh.
3m 28s
5
Workflows pour utilisateurs avancés : Styles et rcParams
Transformez l'apparence de vos graphiques instantanément. Dans notre dernier épisode, nous explorons comment utiliser des style sheets prédéfinies et personnaliser dynamiquement les paramètres globaux à l'aide de rcParams.
3m 56s

Épisodes

1

L'identité fondamentale : Figures, Axes et Interfaces

3m 13s

Bienvenue dans Matplotlib. Dans cet épisode, nous définissons le modèle mental au cœur de la bibliothèque de visualisation la plus populaire de Python. Apprenez la différence entre une Figure et un Axes, et pourquoi l'interface explicite Object-Oriented est votre meilleur outil.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Matplotlib, épisode 1 sur 5. Tu copies une solution de plot depuis Stack Overflow, tu la colles dans ton code, et soudain, ton nouveau graphique écrase l'ancien. Le code a l'air bon, mais il se comporte comme un monstre de Frankenstein. Ça arrive parce que la plupart des exemples en ligne mélangent deux façons complètement différentes d'utiliser la librairie sans expliquer pourquoi. Pour corriger ça, tu dois comprendre l'identité de base : les Figures, les Axes et les Interfaces. Matplotlib est la base de la visualisation en Python. Pandas, Seaborn et plein d'autres librairies tournent par-dessus. Mais les développeurs butent souvent sur son architecture. Pour écrire du code de visualisation propre, tu dois séparer le conteneur du contenu. Dans Matplotlib, ça veut dire comprendre la différence entre une Figure et un Axes. La Figure, c'est ton canvas. C'est le conteneur top-level qui contient toute la fenêtre, le background et tous les éléments à l'intérieur. Mais une Figure ne dessine pas de données. Pour ça, il te faut un Axes. L'Axes, c'est le plot en lui-même. C'est la zone où vivent tes lignes, tes barres et tes scatter points. Une Figure peut contenir plusieurs Axes, comme une grille de quatre subplots. Garde en tête qu'Axes n'est pas le pluriel du mot axis. Un objet Axes contient deux ou trois objets Axis individuels, qui gèrent les lignes de nombres et les ticks spécifiques. Tu attaches tes données à l'Axes, et l'Axes est attaché à la Figure. Une fois que tu sais ce que sont ces objets, tu dois décider comment interagir avec eux. C'est là que la confusion commence. Matplotlib te donne deux façons distinctes de construire un chart : l'interface implicite et l'interface explicite. L'interface implicite repose sur un module appelé pyplot. Il traque le state de ton programme en arrière-plan. Quand tu appelles directement une fonction de plot, Matplotlib suppose que tu veux dessiner sur la Figure et l'Axes actuellement actifs. S'il n'y en a pas, il les crée pour toi. C'est super pratique pour un script rapide, un peu jetable, où tu as juste besoin d'inspecter des données rapidement. Mais comme ça repose sur un global state caché, ça devient imprévisible dans de plus grosses applications. L'interface explicite, souvent appelée interface orientée objet, élimine les devinettes. Tu instancies tes objets dès le départ. D'abord, tu crées la Figure et l'Axes ensemble, puis tu appelles des méthodes directement sur ces objets spécifiques. Tu ne comptes jamais sur la librairie pour deviner quel plot tu cibles. Si tu construis un dashboard réutilisable, utilise toujours l'interface explicite. Tu peux écrire des helper functions qui prennent un objet Axes en argument, qui plot des données dessus, et qui le retournent. La fonction se fiche du global state de l'application. Elle modifie juste l'objet qu'on lui a passé. Ça rend ton code modulaire et testable. Voici l'idée clé. Tu peux utiliser l'une ou l'autre méthode, mais tu ne dois jamais les mélanger. Utilise l'interface implicite de pyplot pour une exploration rapide dans un notebook, et utilise l'interface explicite orientée objet pour le code de production. Si tu aimes l'émission et que tu veux nous soutenir, tu peux nous trouver en cherchant DevStoriesEU sur Patreon. C'est tout pour cette fois. Merci d'avoir écouté, et continue de builder !
2

Le cycle de vie d'un graphique

3m 23s

Découvrez comment faire passer un graphique de données brutes à un affichage formaté et étiqueté. Nous parcourons le cycle de vie d'un graphique simple, en vous montrant exactement comment ajouter des étiquettes, des titres et des tick formatters personnalisés en utilisant l'interface explicite.

Télécharger
Salut, ici Alex de DEV STORIES DOT EU. Matplotlib, épisode 2 sur 5. Formater les nombres sur un axe peut s'avérer un vrai casse-tête. Tu veux un 100 K bien propre avec un signe dollar, mais tu te retrouves avec de la notation scientifique ou des entiers bruts qui encombrent l'écran. La solution est pourtant super simple une fois que tu apprends à passer le contrôle de ton axe directement à une fonction Python standard. Aujourd'hui, on regarde le cycle de vie d'un plot en utilisant l'interface explicite des axes. L'interface explicite traite la création de charts comme un processus prévisible, étape par étape. Tu appelles toujours des méthodes sur un objet spécifique. Le cycle de vie commence par la création d'une figure et d'un objet axes. La figure, c'est la page blanche. L'objet axes représente la zone réelle où tes données vont vivre. Une fois que tu as cet objet axes, chaque personnalisation n'est qu'un autre appel de méthode appliqué dessus. Imagine un scénario où tu as une liste de noms d'entreprises et une liste de leurs chiffres d'affaires. Pour afficher ces données à l'écran, tu appelles une méthode de plot sur les axes. Pour un bar chart horizontal, tu appelles bar h et tu passes les noms et les revenus. À ce stade, tu as un plot fonctionnel, mais il manque de contexte. La phase suivante du cycle de vie, c'est d'ajouter ce contexte. Une approche courante est de définir le title, le x label et le y label individuellement. Cependant, l'objet axes possède une méthode set unifiée. Tu peux appeler set et passer des keyword arguments pour le title, le x label et le y label en une seule fois. Cette seule ligne de code gère le texte structurel de ton chart. Si jamais tu as besoin d'inspecter ce qui est actuellement appliqué, tu peux utiliser les méthodes get correspondantes, comme get x tick labels, pour récupérer l'état actuel avant de le changer. Ça nous amène à la partie la plus critique du fine-tuning : le formatage des nombres sur l'axe. Quand tu plottes des revenus, les grands nombres créent des axes brouillons. Matplotlib pourrait afficher cent mille avec tous ses zéros. Tu veux qu'il affiche cent K avec un signe dollar. Voici l'idée clé. Tu n'as pas besoin de fouiller dans des paramètres obscurs de Matplotlib pour corriger ça. Tu écris juste une simple fonction Python. Tu définis une fonction qui prend deux arguments : la valeur du tick et sa position. À l'intérieur de cette fonction, tu écris de la logique Python standard. Tu vérifies si la valeur est dans les milliers, tu la divises par mille, et tu retournes une string formatée avec un signe dollar et un K majuscule. Pour appliquer ça, tu dis à l'objet axes d'utiliser ta fonction pour ses ticks. Tu accèdes à la propriété x-axis sur ton objet axes, et ensuite tu appelles une méthode nommée set major formatter. Tu passes ta fonction personnalisée directement dans cette méthode. Matplotlib prend le relais à partir de là. Pendant qu'il dessine le plot, il passe chaque valeur de tick sur le x-axis à travers ta fonction Python et affiche la string propre que tu as retournée. L'interface explicite enlève les devinettes de la personnalisation des charts en la décomposant en une séquence fiable : tu crées les axes, tu mappes les données brutes, tu appliques tes labels via une seule méthode set, et tu interceptes le formatage des ticks entièrement avec ta propre logique. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de construire !
3

Maîtriser les mises en page : Subplots et Mosaics

3m 41s

Apprenez à gérer plusieurs graphiques sur un seul canevas sans qu'ils ne se chevauchent. Cet épisode couvre plt.subplots, la puissance de subplot_mosaic pour les mises en page sémantiques, et l'utilisation du constrained layout pour garder les choses en ordre.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Matplotlib, épisode 3 sur 5. Tu dois créer un dashboard avec un graphique d'en-tête large et deux graphiques plus petits en dessous. Avant, ça impliquait de calculer les fractions de la grille et de placer manuellement les axes. Maintenant, tu peux créer ce layout exact en tapant une string en ASCII art. Voici Mastering Layouts : Subplots et Mosaics. La plupart des visualisations de données commencent par une grille de base. Quand tu as besoin d'un layout deux par deux, tu appelles la fonction subplots standard, tu spécifies le nombre de lignes et de colonnes, et Matplotlib te renvoie un objet figure et un array multidimensionnel contenant tes axes individuels. Tu utilises l'indexation standard des arrays pour sélectionner un axe spécifique et dessiner tes données. Ça fonctionne parfaitement jusqu'à ce que tu ajoutes du texte. Par défaut, Matplotlib positionne les axes en fonction de proportions fixes par rapport à la taille de la figure. Il ne tient pas compte de l'espace physique occupé par tes titres, les labels des axes ou les tick marks. Résultat, les labels de l'axe X de ta ligne du haut vont souvent chevaucher les titres de ta ligne du bas. Au lieu d'écrire des ajustements d'espacement personnalisés, tu devrais gérer ça à l'étape de la création de la figure. Passe l'argument layout défini sur le mot constrained. Le constrained layout est un moteur d'optimisation. Juste avant que la figure soit dessinée, il mesure les bounding boxes de tous tes éléments de texte et écarte les axes juste assez pour éviter les collisions. Les subplots standards et les constrained layouts couvrent les grilles symétriques. Mais les dashboards sont rarement symétriques. Tu as souvent besoin de graphiques qui s'étendent sur plusieurs lignes ou colonnes. Ça nous ramène au graphique d'en-tête large qui occupe toute la ligne du haut, avec deux graphiques plus petits côte à côte en dessous. Au lieu de manipuler des objets de spécification de grille de bas niveau, tu peux utiliser une méthode sémantique appelée subplot mosaic. Tu appelles subplot mosaic directement sur ton objet figure. Il accepte une représentation visuelle de ton layout, écrite entièrement avec des strings. Chaque caractère unique que tu tapes représente un graphique distinct. Si un caractère est répété sur plusieurs lignes ou colonnes, ce graphique s'étire pour remplir ces espaces. Pour construire le layout de notre dashboard, tu peux passer une seule string où les lignes sont séparées par des points-virgules. Pour la ligne du haut, tu tapes deux fois la lettre A majuscule. Puis un point-virgule. Pour la ligne du bas, tu tapes la lettre B majuscule, puis la lettre C majuscule. La string complète est simplement A A point-virgule B C. Matplotlib parse cette string et voit que A occupe deux colonnes sur la première ligne, il crée donc un axe large qui couvre le haut. Il voit que B et C occupent chacun une colonne sur la deuxième ligne, il crée donc deux axes plus petits en dessous. Voici le point clé. Parce que les arrays standards perdent tout leur sens dans des layouts complexes, subplot mosaic ne renvoie pas un array. Il renvoie un dictionnaire Python standard. Les clés de ce dictionnaire sont exactement les caractères de la string que tu as définis dans ton design. Si tu veux dessiner un line chart sur ton en-tête large, tu accèdes simplement au dictionnaire en utilisant la clé A. Si tu veux mettre un scatter plot en bas à droite, tu accèdes au dictionnaire en utilisant la clé C. Ton code de tracé devient complètement découplé des coordonnées de la grille. Tu peux aussi utiliser ce système pour créer des espaces blancs intentionnels. Si tu veux un espace vide dans ta grille, tu mets un caractère point dans ta string de layout. Matplotlib lit le point et laisse cette cellule spécifique de la grille complètement vide. Les calculs complexes de grille appartiennent au passé. Le design de layouts modernes consiste simplement à taper la forme visuelle que tu veux et à laisser le dictionnaire mapper tes données exactement au bon endroit sur l'écran. C'est tout pour cet épisode. Merci pour ton écoute, et continue de builder !
4

Au-delà de la ligne : Exploration des principaux types de graphiques

3m 28s

Allez au-delà des lignes basiques et des scatter plots. Nous cartographions les catégories de graphiques de Matplotlib, en opposant les graphiques de distribution statistique aux fonctions de données quadrillées comme imshow et pcolormesh.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Matplotlib, épisode 4 sur 5. Tu as dix mille data points, tu les balances sur un scatter plot, et tu te retrouves avec une énorme tache d'encre illisible où les points qui se chevauchent masquent le vrai pattern. Tu as choisi un outil pairwise pour un problème de densité. Pour aller au-delà du line chart par défaut, tu dois savoir comment faire correspondre la forme de tes données au bon outil visuel, et c'est exactement ce qu'on couvre dans Beyond the Line: Exploring Core Plot Types. Matplotlib organise ses core plots en grandes catégories en fonction de la structure de tes données. Les trois catégories de base sont les données pairwise, les distributions statistiques et les données gridded. La forme la plus basique, c'est pairwise. Tu as un array de valeurs X et un array correspondant de valeurs Y. Tu utilises la fonction plot quand ces points ont une séquence logique, comme une time series, où tracer une ligne continue entre eux montre une tendance. Si les points sont des observations indépendantes, tu utilises la fonction scatter pour placer des marqueurs individuels. Mais les scatter plots ne marchent plus quand tu as une forte densité. Ça nous amène à la deuxième catégorie, qui gère les distributions statistiques. Voici l'idée clé. Quand tu as dix mille points qui se chevauchent, tu te fiches pas mal de la coordonnée exacte du point numéro quatre mille. Ce qui t'intéresse, c'est l'endroit où les points forment un cluster. C'est là qu'intervient une fonction comme hexbin. Elle prend les mêmes arrays X et Y qu'un scatter plot, mais elle regroupe la zone géométrique en bins hexagonaux, en les colorant selon la densité des points pour révéler le pattern caché. Maintenant, imagine un seul array contenant les âges bruts de tous tes clients. Les plotter un par un sous forme de points te donne juste un bruit inutile. À la place, tu passes cette simple liste flat à la fonction hist. Un histogramme regroupe automatiquement les âges individuels par tranches et te montre le volume de clients dans la vingtaine par rapport à ceux dans la cinquantaine. Si tu as besoin de comparer ces distributions d'âge côte à côte pour cinq magasins différents, tu passes sur un boxplot. Le boxplot résume proprement les plages, les médianes et les outliers. Si tu as besoin de plus de détails que ce qu'un boxplot peut fournir, un violinplot dessine la forme courbe complète du profil de densité pour chaque magasin. La troisième grande catégorie, ce sont les données gridded. Ça s'applique quand tes données sont une matrice en deux dimensions et que tu dois visualiser une valeur continue sur une zone. Pense à une carte de température en deux dimensions sur une grille géographique. Chaque position a une coordonnée X, une coordonnée Y et une valeur de température. Tu ne veux pas de lignes ou de scattered points pour représenter ça. Tu veux une surface pleine et colorée. Matplotlib propose imshow et pcolormesh pour ça. Tu utilises imshow quand tes données se trouvent sur une grille parfaitement régulière, comme les pixels d'une photo numérique. Ça suppose un espacement égal entre chaque data point et ça fait le rendu très rapidement. Si les coordonnées de ta grille sont irrégulières, peut-être que tes limites de mesure se déforment ou se compressent près de certains éléments géographiques, tu utilises pcolormesh. Ça calcule et dessine des quadrilatères individuels pour chaque cellule, en épousant exactement la forme déformée de tes arrays de coordonnées. Quand tu dois décider quelle fonction Matplotlib appeler, ignore à quoi tu veux que l'image finale ressemble et regarde strictement la forme mathématique de tes arrays en input : est-ce que ce sont des paires séquentielles, des listes flat, ou des matrices en deux dimensions. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de créer !
5

Workflows pour utilisateurs avancés : Styles et rcParams

3m 56s

Transformez l'apparence de vos graphiques instantanément. Dans notre dernier épisode, nous explorons comment utiliser des style sheets prédéfinies et personnaliser dynamiquement les paramètres globaux à l'aide de rcParams.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Matplotlib, épisode 5 sur 5. Tu vois souvent des gens écrire vingt lignes de code répétitives pour ajuster les tick labels, les grid lines et les fonts pour chaque plot qu'ils créent. Une seule commande peut appliquer toutes ces modifications instantanément sur un projet entier. Cet épisode couvre les workflows de power-user : les styles et les rcParams. Le look standard de Matplotlib est très reconnaissable, mais mettre à jour manuellement des éléments individuels par plot pour correspondre à une esthétique spécifique est inefficace. À la place, tu utilises des style sheets. Matplotlib est fourni avec plusieurs styles intégrés. Tu appelles une fonction nommée style dot use depuis le module pyplot et tu passes une string, comme ggplot ou classic. Si tu prépares une visualisation pour un slide de présentation à thème sombre, tu n'as pas besoin de changer manuellement le background en noir, les axes en blanc et le texte en gris clair. Tu lances style dot use avec dark underscore background tout en haut de ton script. Chaque figure générée après cette ligne hérite instantanément de ce look spécifique. Tu peux même combiner des style sheets. Si tu passes une liste de noms de styles, Matplotlib les applique dans l'ordre, de gauche à droite. Les styles listés à droite vont écraser les settings qui se chevauchent des styles de gauche. Voici l'astuce clé. Appeler style dot use change le global state pour le reste de ta session Python. Si tu veux seulement un style spécifique pour un chart en particulier, tu utilises un context manager appelé style dot context. Tu ouvres le contexte, tu spécifies le nom du style, et tu écris ton code de plotting à l'intérieur de ce bloc. Une fois le bloc terminé, tes plots reprennent le style global qui était actif avant. Sous ces style sheets se trouve un énorme dictionnaire de configuration appelé rcParams. Le r et le c signifient runtime configuration. Chaque propriété par défaut que Matplotlib utilise pour render une figure vit dans ce dictionnaire. Les font sizes, les line widths, les dimensions par défaut des figures et les marker styles sont tous mappés à des string keys spécifiques. Quand tu appliques une style sheet, tu fais essentiellement un bulk-update du dictionnaire rcParams en arrière-plan. Mais tu peux aussi interagir avec lui directement pour faire des ajustements dynamiques et granulaires. Disons que tu as appliqué un style que tu aimes, mais que la line width par défaut est trop fine pour tes besoins. Tu accèdes au dictionnaire rcParams, tu spécifies la key pour lines dot linewidth, et tu lui assignes une nouvelle valeur numérique. À partir de ce moment, chaque ligne dessinée dans ta session prendra par défaut cette épaisseur plus large. Matplotlib fournit aussi une fonction pratique appelée rc pour gérer ça. Au lieu de modifier le dictionnaire key par key, tu appelles rc, tu passes un nom de groupe top-level comme font, et ensuite tu fournis des keyword arguments pour les propriétés spécifiques comme weight ou size. C'est une façon beaucoup plus propre de mettre à jour plusieurs settings liés en même temps. Tu peux aussi définir tes propres styles custom. Une style sheet est simplement un fichier texte avec une extension dot mplstyle. À l'intérieur, elle contient une simple liste de paires key-value rcParams. Tu sauvegardes ce fichier, tu passes son path à style dot use, et ton branding d'entreprise custom est instantanément appliqué à n'importe quel plot sans polluer ton data code. La vraie puissance de la customisation Matplotlib, c'est de découpler ta data logic de tes choix esthétiques. Définir des règles globalement permet de garder tes fonctions de plotting légères et garantit une cohérence visuelle sur toute ta codebase. Je t'encourage à explorer la documentation officielle pour voir la liste complète des runtime configurations disponibles et à essayer de construire une style sheet custom toi-même, ou visite devstories dot eu pour suggérer des sujets pour de futures séries. Merci d'avoir passé quelques minutes avec moi. À la prochaine, prends soin de toi.