Matplotlib Python : Les Bases

Pour bien comprendre un problème, il faut souvent le visualiser. C’est pour cette raison que tout bon ingénieur doit maîtriser des outils de création de graphiques, et c’est ce que nous allons apprendre à faire dans cet article en découvrant le package Matplotlib de Python.

Qu’est ce que c’est Matplotlib ?

Matplotlib est un package (c’est-à-dire un regroupement de plusieurs modules) servant à la création de graphiques Python. Voici quelques exemples de ce que vous pouvez créer avec Matplotlib :

Comme vous pouvez le constater, tout est possible ! Graphiques 3D, cartes, lignes, points, gradients, couleurs… avec Matplotlib, vous avez le contrôle sur tous les paramètres que vous pourriez imaginer (jusqu’à la position de votre légende) sans vous casser la tête avec une syntaxe trop complexe. Alors je vous propose de mettre Excel à la poubelle pour découvrir sans plus attendre comment générer de tels graphiques !

Générer des graphiques simples avec Matplotlib.pyplot

Pour créer un graphique avec matplotlib, c’est très simple. il suffit d’importer un module appelé pyplot et d’utiliser une fonction de graphique parmi les suivantes :

  • scatter(x, y) : affiche un graphique à points entre x et y
  • plot(x, y) : affiche un graphique ligne entre x et y
  • hist(x) : affiche un histogramme de x.

Démonstration avec la fonction scatter() :

import numpy as np
import matplotlib.pyplot as plt

# création de données
x = np.linspace(0, 10, 30)
y = np.sin(x)

plt.scatter(x, y)
plt.show() # affiche le graphique (optionnel dans Jupyter)

Cette façon de procéder est rapide et simple, parfaite pour examiner un nuage de points ou une fonction mathématique avec une simple ligne de code. Pour aller plus loin, Matplotlib vous offre également la possibilité de contrôler le style de vos graphiques : couleur, style de lignes, épaisseurs, transparences, etc. Voyons ça tout de suite.

Contrôler le style de vos graphiques Matplotlib

Pour conférer un style à vos graphiques, il suffit d’ajouter certains arguments dans les fonctions plot() et scatter(). Parmi les arguments les plus utiles, je vous conseille de retenir :

  • c : couleur du graphique (‘red’, ‘blue’, ‘black’, etc…)
  • lw : épaisseur du trait (pour les graphiques de lignes)
  • ls : style de trait (pour les graphiques de lignes)
  • marker :style de points (pour les graphiques de points)
  • alpha : transparence de la ligne ou des points
import numpy as np
import matplotlib.pyplot as plt

# création de données
x = np.linspace(0, 10, 30)
y = np.sin(x)

plt.plot(x, y, c='blue', ls='--', lw=1, alpha=0.5)
plt.scatter(x, y, c='red', marker='+')
plt.show()

Vous remarquez au passage que dans l’exemple ci-dessus, nous obtenons les deux graphiques plot et scatter superposés l’un sur l’autre. Par défaut, Matplotlib superpose en effet vos graphiques sur une seule figure, mais vous pouvez séparer ces graphiques en créant différentes sous-figures grâce a une fonction appelée subplot.

Matplotlib subplot : Diviser votre figure en plusieurs sous-figures

La fonction subplot() permet de diviser une figure en plusieurs parties, créant ainsi une grille de sous-figures. Pour cela, il faut faire passer 3 nombres dans cette fonctions. Le nombre de lignes de la grille, le nombre de colonne de la grille, et la sous-figure sur laquelle travailler. On écrit ainsi : plt.subplot(#lignes, #colonnes, sous-figure)

Par exemple, voici une grille de 1 lignes, et 2 colonnes :

plt.subplot(1, 2, 1) # 1 ligne, 2 colonnes, sous-figure 1
plt.plot(x, y, c='blue', ls='--', lw=1, alpha=0.5)
plt.scatter(x, y, c='red', marker='+')

plt.subplot(1, 2, 2)  # 1 ligne, 2 colonnes, sous-figure 2
plt.scatter(x, y, c='orange', marker='x')

plt.show()

Le résultat semble un peu “compressé”, il faut donc définir une figure plus large pour contenir nos deux sous-figures. Pour cela, il faut commencer notre code en définissant la création d’une nouvelle figure et en indiquant les dimensions de cette figure

Note: Dans Matplotlib, une figure correspond au canvas sur lequel vous comptez réaliser votre graphique. Pour prendre des termes simples, c’est un peu comme une feuille de papier sur laquelle vous allez tracer un ou plusieurs graphiques

plt.figure(figsize=(12, 3)) # création d'une figure de largeur 12 pouces et hauteur 3 pouces

plt.subplot(1, 2, 1) # 1 ligne, 2 colonnes, sous-figure 1
plt.plot(x, y, c='blue', ls='--', lw=1, alpha=0.5)
plt.scatter(x, y, c='red', marker='+')

plt.subplot(1, 2, 2)  # 1 ligne, 2 colonnes, sous-figure 2
plt.scatter(x, y, c='orange', marker='x')

plt.show()

.

Pas mal ! Pour finir dans la création de figures simples, il est nécessaire de voir comment afficher des titres, axes et légendes à nos figures !

Matplotlib : Titres, Axes, Légendes

Pour créer des Titres, axes, et légendes dans Matplotlib, il suffit d’utiliser les fonctions suivantes sur chacune de vos figures ou sous-figures:

  • plt.title() : ajoute un titre à la figure
  • plt.xlabel() plt.ylabel() : ajoute des axes à la figure
  • plt.lenged() : ajoute une légende (selon le label indiqué dans la fonction plot() ou scatter()
x = np.linspace(-5, 5, 100)

# création des graphiques
plt.plot(x, np.sin(x), label='sin(x)')
plt.plot(x, np.cos(x), label='cos(x)')

# embellissement de la figure
plt.title('sin(x) et cos(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()

plt.show()

Je vous propose désormais d’assembler tout ces concepts ensemble en vous montrant le cycle de vie d’une figure Matplotlib.

Cycle de vie d’une figure Matplotlib

Pour bien faire les choses avec Matplotlib, je vous recommande de commencer par déclarer la création d’une figure avec plt.figure(), ce qui vous donne l’opportunité de définir la taille de votre figure.

Ensuite, vous pouvez travailler sur différentes sous-figures au sein de votre figure avec la fonction subplot(). Sur chaque sous-figure, vous pouvez superposer plusieurs graphiques (lignes, points, et d’autres que vous pouvez découvrir ici) et ajouter des titres, axes, et légendes.

Je vous conseille également d’utiliser la fonction plt.savefig(‘figure.png’) si vous désirer automatiquement sauvegarder votre figure sur votre ordinateur.

Voici une petite démonstration :

x = np.linspace(-5, 5, 100)

# Nouvelle figure
plt.figure(figsize=(8, 8))

# Sous-figure 1
plt.subplot(2, 1, 1)
plt.plot(x, np.sin(x), label='sin(x)')
plt.plot(x, np.cos(x), label='cos(x)')
plt.title('sin(x) et cos(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()

# Sous-figure 2
plt.subplot(2, 1, 2)
plt.plot(x, np.sinh(x), label='sinh(x)', ls='--', alpha=0.8)
plt.plot(x, np.cosh(x), label='cosh(x)', ls='--', alpha=0.8)
plt.title('sinh(x) et cosh(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()

# Affiche la figure et l'enregistre
plt.show()
plt.savefig('mafigure.png')

Matplotlib Avancé : Programmation Orientée Objets

Matplotlib dispose également d’une interface orientée objets qui donne encore plus de contrôle sur vos graphiques, comme par exemple pour partager la même abscisse sur 2 sous-figures. Cependant, je ne recommande pas d’utiliser cette interface si vous débutez avec Matplotlib, et le tutoriel que vous venez de suivre vous permettra d’accomplir 99% des graphiques que vous pourriez imaginer.

Pour plus d’informations sur matplotlib, je vous invite à consulter la documentation du site officiel ici.

Laisser un commentaire

Fermer le menu