Table des matières
Les bases de Matplotlib, une librairie pour réaliser des graphiques 2D
Matplotlib est une bibliothèque très puissante du langage de programmation Python destinée à tracer et visualiser des données sous formes de graphiques. Elle est souvent combinée avec les bibliothèques python de calcul scientifique :
- NumPy : gestion de tableaux numériques multidimensionnels, algèbre linéaire, transformées de Fourier, nombres (pseudo-)aléatoires
- SciPy : méthodes numériques comme l'intégration ou l'optimisation
- SymPy : mathématiques symboliques
- Pandas: analyse de données
Avec Matplotlib, on peut créer rapidement un graphe à partir de deux listes (voir le premier exemple ci-après).
Matplotlib permet de générer facilement des graphiques, camemberts ou autres histogrammes, intégrant symboles, barres d'erreur, éléments colorés,… Il peut créer pratiquement tous les types connus de graphiques (consulter la galerie d'exemples).
Le projet Pylab vise à regrouper ces différentes librairies. De nombreuses commandes de Pylab ont été définies semblablement aux commandes du logiciel commercial MatLab.
TODO : différences pyplot comme ici : https://towardsdatascience.com/5-quick-facts-about-python-matplotlib-53f23eab6d31
Installation
La page d'installation de Matplotlib fournit une procédure pas à pas assez complète et facile pour installer matplotlib (et NumPy). Sinon :
- Sous Windows, installez une distribution complète comme Anaconda ou Python (x, y)
- Sous GNU/Linux, on peut aussi n'installer que les librairies suivantes : python-numpy python-scipy python-matplotlib
Directive d'importation
- standard :
import matplotlib as mpl import matplotlib.pyplot as plt
- alternative, simplifiée (en mode pylab, pour obtenir une certaine compatibilité avec Matlab) :
from pylab import *
Graphiques de séries de points en lignes
Il s'agit d'un graphe classique de séries de points reliés par une ligne colorée :
- simple_series_01.py
#! /usr/bin/env python # -*- coding: utf-8 -*- """ Matplotib : graphe simple de séries de données """ import matplotlib.pyplot as plt #directive d'importation standard plt.figure() #initialisation d'une nouvelle figure #les données serie_x = [0.,1.,2.,3.,5.,7.,11.,13.,17.,19.] serie_y1 = [x**2 for x in serie_x] # ces lignes utilisent la technique de "liste en compréhension" serie_y2 = [x**1.5 for x in serie_x] # pour définir efficacement une liste par une seule instruction. #plot de deux lignes lignes plt.plot(serie_x, serie_y1) plt.plot(serie_x, serie_y2) plt.savefig("example.png") # sauvegarde de la figure plt.show() # vue interactive de la figure
Le même graphique peut être agrémenté d'un titre, d'appellations pour les axes, de valeurs limites, d'une légende :
- simple_series_02.py
#! /usr/bin/env python # -*- coding: utf-8 -*- """ Matplotib : graphe simple de séries de données ajouts des titres pour la figure, les axes, d'une légende, de valeurs min et max """ import matplotlib.pyplot as plt #directive d'importation standard plt.figure() #initialisation d'une nouvelle figure plt.title("Ma première figure avec Matplolib") #les données serie_x = [0., 1., 2., 3., 5., 7., 11., 13., 17., 19.] serie_y1 = [x**2 for x in serie_x] serie_y2 = [x**1.5 for x in serie_x] plt.xlim(0, 20.) #les limites suivant x plt.ylim(-5, 400.) # les limites suivant y #plot de deux lignes lignes plt.plot(serie_x, serie_y1, label="x^2") plt.plot(serie_x, serie_y2, label="x^1.5") plt.xlabel("Les données X") plt.ylabel("Des valeurs calculées de Y") #ajout d'une légende plt.legend() plt.savefig("example.pdf") # sauvegarde de la figure au format pdf plt.show() # vue interactive de la figure
Changer simplement les lignes en points
La personnalisation des lignes ou point se fait très facilement lorsqu'on utilise la fonction de traçage, en passant dans une chaîne de deux caractères la spécification du type de ligne et de la couleur à utiliser. Voici un exemple d'un graphique qui utilise des cercles verts comme marqueurs, sans ligne, grâce aux deux caractères “g” (pour green ou vert) et “o” (pour figurer des petits cercles.
- simple_series_03.py
#! /usr/bin/env python # -*- coding: utf-8 -*- """ Matplotib : graphe simple de séries de données utilisation de points """ import matplotlib.pyplot as plt #directive d'importation standard plt.figure() #initialisation d'une nouvelle figure #les données serie_x = [0., 1., 2., 3., 5., 7., 11., 13., 17., 19.] serie_y1 = [x**2 for x in serie_x] #plot plt.plot(serie_x, serie_y1, "go") plt.show() # vue interactive de la figure
Pour essayer d'autres marqueurs ou couleurs, consultez la documentation ici :
Tracé d'une fonction
- simple_fonction_01.py
#! /usr/bin/env python # -*- coding: utf-8 -*- """ Matplotib : graphe simple d'une fonction : cosinusoïde amortie """ from pylab import * # directive d'importation simplifiée def my_func(t): s1 = cos(2*pi*t*1.) #essayez 2., 4., 100. !! e1 = exp(-t) return s1*e1 tvals = arange(0., 5., 0.05) # arange (importé) permet de définir un tableau numérique # arange([start], stop[, step]) renvoie un "array" de valeurs # espacées de step à partir de start jusque stop # passer step à 0.001 ? plot(tvals, my_func(tvals), 'bo', tvals, my_func(tvals), 'k') show()
Graphe simple de sinus et cosinus
À cette page, on montre en détail comment réaliser une représentation graphique simple des fonctions sinus et cosinus. Au départ le graphique utilisera les réglages par défaut et la figure sera ensuite améliorée pas à pas en commentant les instructions matplotlib utilisées.
Source : Matplotlib: plotting, par Nicolas Rougier, Mike Müller, Gaël Varoquaux.
Galerie d'exemples
Histogramme simple | Rotateur biatomique | Potentiel de Morse |
Ph à 3D (dilution et neutralisation) | Couples acide-base dans le plan pKa/pKb | un autre… |
un autre… | un autre… | un autre… |
Utilisation "inline" ou en fenêtre interactive, sous Spyder
Notamment avec l'éditeur Spyder, il est possible de choisir le mode d'affichage des graphes :
- dans une fenêtre interactive
- en ligne (mode “inline”) sous forme d'une image au format .png, dans la console
Pour choisir le mode, utiliser les réglages suivants de Spyder : menu Outils - option Préférences - rubrique Console Ipython - onglet Graphiques - la sortie “Automatique” permet d'obtenir les graphes dans une fenêtre interactive, sinon, choisir “En ligne”. L'option sera prise en compte après avoir quitté Spyder et l'avoir relancé. Sinon, il est possible de sélectionner l'un ou l'autre des modes par les commandes suivantes dans la console :
%matplotlib auto
%matplotlib inline
Régression linéaire
- voir aussi pandas
Animations
Styles
Références
- Manuel en pdf (1311 pages)
- matplotlib - 2D and 3D plotting in Python, tutoriel Jupyter en anglais
- Matplotlib: plotting, par Nicolas Rougier, Mike Müller, Gaël Varoquaux (et la version dérivée de Nicolas Rougier)
- Scientific Visualization: Python & Matplotlib (Nicolas P. Rougier)
- Un article intéressant sur les recommandations pour de bonnes figures : Ten Simple Rules for Better Figures, Nicolas P. Rougier (INRIA, France). Les figures sont crées avec matplotlib et l'ensemble de l'article est disponible sous licence CC0.
- Tutoriels du Max Planck Institute for Astronomy, avec introduction et fonctions avancées
- Bokeh, une autre librairie de visualisation
- Seaborn, une librairie basée sur Matplotlib
- the Python Graph Gallery, galerie de graphes Seaborn/Matplotlib avec code
- A Reference Notebook for (+30) Statistical Charts in Seaborn Anello, Medium, 02/04/2021
- 8 Best Seaborn Visualizations - How to plot statistical graphs using the Python Seaborn library? Tirendaz Academy, Medium, 07/05/2022
- manimplotlib, libraire de graphes animés
- Your Ultimate Guide to Matplotlib (not so ultimate…)
- Line Chart Basics with Python’s Matplotlib One of the most used and most effective ways of visualizing data
- 5 Powerful Tricks to Visualize Your Data with Matplotlib - How to use LaTeX font, create zoom effect, outbox legend, continuous error, and adjust box pad margin - Towards Data Science, Medium, 29/09/2020
- Everything about plotting in Python - From matplotlib to pandas.plot() Medium, 17/07/2020
- Matplotlib Tutorials 10 videos Youtube de Corey Schafer
- Python Data Visualization with Matplotlib — Part 1 - Completed Matplotlib tutorials for Python plotting from basic to advanced, with 90+ examples, Medium, 20/10/2020 Rizky Maulana Nurhidayat
- Stacked Bar Charts with Python’s Matplotlib - An excellent way to visualize proportions and composition Thiago Carvalho, 23/11/2020, Medium
- Making publication-quality figures in Python (Part I): Fig and Axes (Guangyuan (Frank) Li, Medium, Jan, 2021)
- Making publication-quality figures in python (Part II): Line plot, Legends, Colors (Guangyuan (Frank) Li, Medium, Jan, 2021)
- Making publication-quality figures in Python (Part IV): Violin plot and dendrogram - Drawing violin plot and dendrogram from the scratch, a step-by-step guide (Guangyuan (Frank) Li, Medium, Jan, 2021)
- Violin plots in matplotlib. Your dose of Scientific Python Mathcube, Medium, 07/04/2023
- All you need to know about Seaborn - When should I use Seaborn versus matplotlib, and how to use it? (Guangyuan (Frank) Li, Medium, Jan, 2021)
- Making Matplotlib Beautiful By Default - Use Seaborn to control Matplotlib defaults (and forget that shade of blue forever) Callum Ballard, Medium, 22/05/2020
- Creative report designed only with Matplotlib, without office software Yefeng Xia, Medium, 04/01/2021
- Texts, Fonts, and Annotations with Python’s Matplotlib - When and how to use texts in your data visualizations Thiago Carvalho, Medium, 21/01/2021
- Mastering Matplotlib: Part 1. Understanding Matplotlib Architecture... by Lawrence Alaso Krukrubo - DataSeries - Medium, 17/06/2020
- Mastering Matplotlib: Part 2. Exploring Matplotlib-Pandas by Lawrence Alaso Krukrubo - DataSeries - Medium, 29/06/2020
- 4 Things to Know to Have a Better Understanding of Matplotlib - Getting familiar with one of the original Python data visualization libraries Soner Yıldırım, 16/09/2022, Medium
- Figure and Axes
- Some things can be implicit
- Labels on Figure and Axes
- Figure with multiple Axes
- How to Create Scientific Plots Using Matplotlib, Python, and LaTeX Berkay Kullukçu, Medium, 16/08/2022
Références générales sur les graphiques et visualisations ou représentations visuelles
- Principes généraux, histoire,…
- The Visual Display of Quantitative Information Edward Tufte
- Articles intéressants :
- 6 Reasons Why You Should Stop Using Histograms (and Which Plot You Should Use Instead) Histograms are not free of biases. Actually, they are arbitrary and may lead to wrong conclusions about data. If you want to visualize a variable, better to choose a different plot. Samuele Mazzanti, Medium, 24/01/2021
Exemples
- Jupyter notebooks :
- Python Science Tutorials Naveen Venkatesan, contains a series of scripts and notebooks to help people get acclimated to using Python for scientific publications.