version 1.0.1, dernière mise à jour le 26 novembre 2021.
Le module Matplotlib fonctionne en utilisant le module numpy. Celui-ci est spécialisé dans la manipulation de vecteurs, de matrices mais incorpore aussi plusieurs fonctions mathématiques, qui vont nous servir pour illustrer ce cours. Pour l'utiliser, il suffit de faire
import numpy as np
Numpy définit :
des fonctions trigométriques avec cos (par exemple np.cos(x)
), sin, tan, arcsin, arccos et arctan
des fonctions de trigonométrie hyperbolique avec cosh, sinh, tanh, arcsinh, arccosh et arctanh
des fonctions de manipulation des nombres complexes avec real, imag, abs, angle et conj aux noms explicites
diverses autres fonctions mathématiques comme exp, log (pour le logarithme népérien), abs, sign, sqrt (pour la racine carrée) et la mise à la puissance avec **
des fonctions d'arrondi avec around (l'entier le plus proche) et trunc (la partie entière)
Nous seront aussi utiles certaines constantes, comme np.pi
, ou des fonctions comme linspace
, qui fonctionnent un peu comme list(range(…))
, mais de manière plus explicite : on indique un nombre de départ, un nombre d'arrivée et un nombre de points. Par exemple, linspace(np.pi, 42, 100)
génère une liste de 100 nombres régulièrement distribués entre ᴨ et 42.
Il faut aussi importer Matplotlib, en fait souvent une seule de ses parties :
import matplotlib.pyplot as plt
Il suffit de saisir deux listes. Par exemple…
import matplotlib.pyplot as plt
x = [-3, -2, -1, 0, 2, 3]
y=[7, 7, 6, 1, 1, 8]
plt.plot(x,y)
plt.show()
On obtient alors…
Mais en fait, comme on peut saisir une liste quelconque, on peut aussi tracer des figures géométriques :
import matplotlib.pyplot as plt
x = [3, 4, 4, 1, 8, 7, 3]
y = [1, 8, 7, 2, 5, 7, 1]
plt.plot(x,y)
plt.show()
Comme on l'a vu avec l'exemple simple précédent, il est facile de tracer une fonction affine par morceaux. Pour obtenir des courbes plus « lisses » il faut augmenter le nombre de points. Regardons ce qui se passe avec la fonction cosinus (définie avec le module numpy) et 6, puis 100 points entre -4ᴨ et +4ᴨ :
import numpy as np |
|
import numpy as np |
Il est de plus facile d'ajouter une nouvelle courbe, puisqu'il suffit de créer une nouvelle liste et de l'afficher :
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-4*np.pi, 4*np.pi, 100)
y1 = np.cos(x)
y2 = np.sin(x)
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()
Par défaut, matplotlib attribue des couleurs différentes prédéfinies aux deux courbes.
On peut très facilement construire une courbe paramétrique. Par exemple, pour tracer une ellipse on pourra faire…
import numpy as np
import matplotlib.pyplot as plt
theta = np.linspace(0, 2*np.pi, 100)
x = np.cos(theta)
y =2* np.sin(theta)
plt.plot(x,y)
plt.show()
On obtient alors…
Cette courbe paramétrique a un problème. En effet, elle devrait être deux fois plus haute que large, et c'est ici le contraire. Cela est dû au fait que le repère n'est pas orthonormé. On corrige cela avec l'instruction axis("equal")
, qui permet d'assurer que les échelles sont les mêmes en abscisses et en ordonnées. On écrira plt.axis("equal")
:
import numpy as np
import matplotlib.pyplot as plt
theta = np.linspace(0, 2*np.pi, 100)
x = np.cos(theta)
y =2* np.sin(theta)
plt.axis("equal")
plt.plot(x,y)
plt.show()
Jusqu'à présent, nous nous sommes contentés de conserver les réglages par défaut pour l'apparence du cadre du graphique. On peut bien évidemment le paramétrer.
xlim
et ylim
permettent de spécifier les limites sur les axes de abscisses et des ordonnées. Par exemple, plt.xlim(-5,6)
permet de forcer l'affichage de l'axe des abscisses entre -5 et 6.
On peut ajouter une grille au cadre, avec la méthode grid
: plt.grid()
. Il est bien sûr possible de spécifier la taille des mailles de la grille…
La méthode plot
permet d'utiliser un repère linéaire, mais on peut aussi tracer un diagramme avec un ou deux axes logarithmiques: logarithmique en abscisses avec semilogx
, en ordonnées avec semilogy
et su les deux axes avec loglog
. Par exemple…
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 8*np.pi, 100)
y = np.cos(x)
plt.grid()
plt.semilogx(x,y)
plt.show()
Un titre peut être indiqué avec title
, par exemple plt.title('Titre du graphique")
. Il s'affiche au-dessus du cadre
On peut indiquer une légende en couplant un mot-clef, label
, à la méthode legend
. Par exemple…
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-4*np.pi, 4*np.pi, 100)
y = np.cos(x)
plt.plot(x,y, label="Fonction cosinus")
plt.legend()
plt.show()
Par défaut, la légende est placée près de l'origine du repère. Dans l'exemple précédent, cela a pour effet de la placer au beau milieu de la figure. On peut y remédier à l'aide du paramètre loc
:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-4*np.pi, 4*np.pi, 100)
y = np.cos(x)
plt.plot(x,y, label="Fonction cosinus")
plt.legend(loc="lower left")
plt.show()
On peut aussi indiquer une étiquette en regard des axes, avec xlabel
et ylabel
, par exemple plt.xlabel("Abscisses")
On peut modifier le tracé de la courbe, en agissant sur sa forme elle-même (continue, pointillés…) ou bien les marqueurs des points. Pour cela, on précise la mise en forme juste après avoir indiqué ce que l'on trace lors de l'appel à plt
. Par exemple, on écrira plt.plot(x, y, "--")
pour tracer une courbe avec des tirets, ou plt.plot(x, y, "-")
pour une ligne continue, et des marqueurs en forme de cercle. On peut aussi utiliser le mot-clef linestyle
, et les exemples précédents s'écriront respectivement plt.plot(x, y, linetyle="dashed")
et plt.plot(x, y, linestyle="solid")
. Les options possibles sont au nombre de 4 pour les lignes :
|
Il y a beaucoup plus de styles de marqueurs. Les plus courants sont .
pour les points, s
pour les carrés, o
pour les cercles, *
pour les étoiles, x
pour les x, +
pour les croix…
On combine ces caractères pour préciser quel type de ligne on souhaite. On écrira ainsi plt.plot(x, y, "--o")
pour obtenir une ligne avec des tirets, dont les points sont marqués par des cercles. Si on utilise la syntaxe avec le mot-clef linestyle
, alors il faut procéder de même avec les marqueurs, et on écrira par exemple plt.plot(x, y, linestyle="dashed", marker="o")
pour obtenir le même résultat.
La largeur de la ligne peut être spécifiée avec le mot-clef linewidth
. On écrira par exemple plt.plot(x, y, linewidth=2)
pour indiquer une largeur de ligne de 2 pixels.
La couleur est précisée avec le mot-clef color
. On écrira par exemple plt.plot(x, y, color="blue")
pour tracer une courbe en bleu. Les couleurs sont les mêmes qu'avec le langage HTML
. Si on utilise la syntaxe compacte, on peut faire précéder le style de ligne par une lettre abrégeant le nom de la couleur. Par exemple, pour tracer une ligne continue rouge, on écrira plt.plot(x, y, "r-")
.
Il n'y pas de difficulté majeure pour tracer une courbe à partie d'un fichier CSV ; il suffit juste d'attribuer les valeurs dans les bonnes listes. Par exemple, si la première colonne du fichier contient les abscisses et la seconde les ordonnées, on écrira…
import csv
with
open("valeurs.csv", "r", newline="") as fichier :
lignes = csv.reader(fichier)
for ligne in lignes :
x.append(liste[0])
y.append(liste[1])
plt.plot(x, y)
plt.show()
Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.