Informatique Introduction à Matplotlib Python scientifique
Matplotlib
Matplotlib est un module destiné à produire des graphiques de toute sorte (voir [Link]
html pour une gallerie d’images produites avec Matplotlib). Il peut fonctionner à partir de tableau Python, mais
nous l’utiliserons essentiellement à partir de tableaux Numpy. Un guide d’utilisation se trouve à l’adresse http://
[Link]/users/[Link]. Un autre bon guide avec beaucoup d’exemples se trouve sur [Link]
fr/~rougier/teaching/matplotlib/
Graphe simple
on importe le module [Link] sour le nom plot afin d’avoir accès aux fonctions de façon plus simple
>>> import [Link] as plt
la fonction la plus simple est la fonction plot sour la forme plot(x,y) où x est un tableau d’abscisses et y le tableau
des ordonnées associées
>>> import [Link] as plt
>>> x=[Link] (0 ,1,21)
>>> y=x*x
>>> [Link](x,y)
[<[Link].Line2D object at 0x7facbdfc2490 >]
>>> [Link] () # affiche le graphe créé
La dernière commande ouvre une fenêtre avec le graphe
1 année 2016/2017
Informatique Introduction à Matplotlib Python scientifique
De la même façon, on peut tracer une courbe paramétrée. Ici on trace la courbe définie par f (t ) = (sin(2t ), sin(3t ))
pour t ∈ [0, 2π] :
>>> t=[Link] (0,2*[Link] ,101)# discrétisation du temps entre 0 et 2 pi.
>>> x=[Link] (2*t) # les abscisses
>>> y=[Link] (3*t) # les ordonnées
>>> [Link](x,y) # la suite est classique
[<[Link].Line2D object at 0x7facbd916a50 >]
>>> [Link] ()
On obtient
Plusieurs courbes en même temps
Il suffit de les ajouter sur le même graphe avec [Link] :
>>> x=[Link] (0,2*[Link] ,101)
>>> [Link](x,[Link](x))
>>> [Link](x,[Link] (2*x))
>>> [Link](x,[Link] (3*x))
>>> [Link] ()
De façon plus condensée, on peut le faire en une seule instruction
>>> x=[Link] (0,2*[Link] ,101)
>>> [Link](x,[Link](x),x,[Link] (2*x),x,[Link] (3*x))
>>> [Link] ()
Quelques améliorations
• Propriétés de la courbe : lorsqu’on crée un plot, on peut préciser différentes options comme le style de
ligne, la couleur. Pour le détail : [Link]
Cela peut être fait de manière détaillée en précisant les options ou grâce à une expression condensée
>>> x=[Link] (0,2*[Link] ,21)
>>> [Link](x,[Link](x), 'b-.^')
2 année 2016/2017
Informatique Introduction à Matplotlib Python scientifique
le troisième argument décrit le style de courbe
Style simplifié d’une courbe
r,g,b,c,m,y,w,k couleur (k pour black)
- -- -. : style de la ligne
. , ^ o < > + x style des marqueurs (voir l’aide pour d’autres)
On peut également préciser les options dans une liste d’options
>>> x=[Link] (0,2*[Link] ,101)
>>> [Link](x,[Link](x), color='red', linewidth =3, linestyle=" -.", marker="o", markersize =10,
markeredgecolor="g", markeredgewidth =3)
>>> [Link] ()
On ira voir [Link] pour la description
des options de style d’une ligne.
• Axes : les axes sont un objet créé lorsqu’on commence un graphique. On récupère cet objet avec la commande
[Link]() (get current axis). On peut alors modifier ses propriétés. On dispose pour commencer de la zone
d’affichage qu’on peut modifier avec les commandes xlim et ylim :
>>> x=[Link] (0,2*[Link] ,41)
>>> [Link](x,[Link](x))
>>> [Link] ()
(0.0, 7.0)
>>> [Link](0,[Link])
(0, 3.141592653589793)
>>> [Link] (0,1)
(0, 1)
>>> [Link] ()
3 année 2016/2017
Informatique Introduction à Matplotlib Python scientifique
Pour les options, il y en a beaucoup trop à détailler (aller voir sur internet si besoin). On pourra regarder l’exemple
final.
1 import numpy as np
2 import [Link] as plt
3
4 x=[Link](-[Link] ,2*[Link] ,51)
5 [Link](x,[Link](x),color='green ',label='sinus ', marker='x', linestyle='--')
6 [Link](x,[Link](x),color='blue ', label='cosinus ', marker='o')
7
8 axis=[Link]() # on récupère les axes
9
10 [Link] (-3,5) # taille de la fenêtre
11 [Link] (-1,1)
12
13 [Link]['top']. set_color('none ') # on retire l'axe supérieur
14 [Link]['right ']. set_color('none ') # et de droite
15 [Link]['bottom ']. set_position('zero ')
16 [Link]['left ']. set_position('zero ')
17
18 [Link]([Link] (-1,1,5)) # on modifie les étiquettes des ordonnées
19
20 [Link] ()
21 [Link] ()
22
23 [Link] ()
Axes et axis
Ne pas mélanger « axis » ([Link] et « axes » ([Link]
api/axes_api.html) sous matplotlib : le premier désigne les axes, le second une fenêtre dans laquelle on travaille
4 année 2016/2017
Informatique Introduction à Matplotlib Python scientifique
(on ne rentre pas dans les détails, cela s’éloigne beaucoup de ce qu’il faut savoir). On en parlera un petit peu lors
des graphiques dans l’espace
Histogrammes
Un exemple est plus explicite
1 import numpy as np
2 import [Link] as plt
3 # on crée un tableau avec des valeurs aléatoires obtenues
4 # avec une loi normale
5 valeurs=[Link] (1000)
6 [Link](valeurs)
7 [Link] ()
On peut modifier quelques options intéressantes, par exemple
1 import numpy as np
2 import [Link] as plt
3 # on crée un tableau avec des valeurs aléatoires obtenues
4 # avec une loi normale
5 valeurs=[Link] (1000)
6 [Link](valeurs ,
7 25, # nombre de barres
8 normed=True , # données normalisées
9 cumulative=True , # histogramme cumulatif
10 color='green ', # couleur
11 histtype='stepfilled ' # type : bar ,barstacked ,step ,stepfilled
12 )
13 [Link] ()
Graphes en coordonnées polaires
On utilise la commande polar :
5 année 2016/2017
Informatique Introduction à Matplotlib Python scientifique
1 theta=[Link] (0,2*[Link] ,500)
2 r=[Link] (3* theta)
3 [Link](theta ,r)
4 [Link] ()
On peut modifier quelques options
1 theta=[Link] (0,2*[Link] ,500)
2 r=1+[Link](theta)
3 [Link](theta ,r)
4 [Link]([Link] (0 ,360 ,20))
5 [Link] ([0.5 ,1 ,1.5 ,2] , angle =10)
6 [Link] ()
Figures et subplots
On commence une nouvelle figure avec l’instruction figure(numero) (le numéro n’est pas obligatoire). L’affichage
avec [Link]() ouvrira une fenêtre pour chaque figure créée. Plus intéressant, on peut dans une même figure, créer
plusieurs graphiques. On utilise pour cela la commande subplot sous la forme subplot(p,q,n) où (p, q) représente la
taille du tableau des sous-graphiques et n la position dans ce tableau : si p = 2 et q = 3, alors on crée une grille de 6
graphiques (2 lignes et 3 colonnes) numérotés de 1 à 6.
import numpy as np
import [Link] as plt
x=[Link] (0,[Link] ,31)
[Link]("Différents graphes") # le titre général
[Link] (2,2,1) # une grille 2x2 - premier graphique
[Link] ((0,[Link] ,0,1))
y=[Link](x)
[Link]('sinus ')
[Link] ([0 ,1 ,2 ,3])
plt.
[Link](x,y,"b-")
6 année 2016/2017
Informatique Introduction à Matplotlib Python scientifique
[Link] (2,2,2) # second graphique
[Link] ((0,[Link] ,0,1))
[Link]('sinus points ')
[Link](x,y,"go")
[Link] (2,2,3) # troisième graphique
y=[Link](x)
[Link] ((0,[Link] ,-1,1))
[Link]('cosinus ')
[Link](x,y,"b-")
[Link] (2,2,4) # et le dernier
[Link] ((0,[Link] ,-1,1))
[Link]('cosinus points ')
[Link](x,y,"go")
[Link] () # on affiche le tout
Contour et grille
Dans cette partie, on veut tracer les lignes de niveau d’une fonction de deux variables (ou plus généralement d’un
tableau de 2 dimensions). Pour cela, on a besoin de créer un tableau en 2 dimensions avec les valeurs. On pourrait
le faire avec deux boucles imbriquées mais Numpy dispose de tout ce qu’il faut pour faire les calculs vectoriellement.
1
Admettons que l’on se situe sur le carré [0, 1] × [0, 1]. On va illustrer sur une discrétisation régulière de pas mais on
N
peut faire moins régulier... On peut commencer par créer
>>> N=50
>>> x=[Link] (0,1,N+1)
>>> y=[Link] (0,1,N+1)
Le soucis est d’évluer une fonction sur la grille complète, de façon simple. On illustre avec f : (x, y) 7→ 2x 2 +sin(3∗ y). On
crée deux grilles de taille (N + 1) × (N + 1) avec les valeurs de x et y aux différents points :
>>> X,Y=[Link](x,y)
>>> X
array ([[ 0. , 0.02, 0.04, ..., 0.96, 0.98, 1. ],
[ 0. , 0.02, 0.04, ..., 0.96, 0.98, 1. ],
[ 0. , 0.02, 0.04, ..., 0.96, 0.98, 1. ],
...,
[ 0. , 0.02, 0.04, ..., 0.96, 0.98, 1. ],
[ 0. , 0.02, 0.04, ..., 0.96, 0.98, 1. ],
[ 0. , 0.02, 0.04, ..., 0.96, 0.98, 1. ]])
On n’a plus qu’à évaluer la fonction sur cette grille
>>> Z=2*X*X+[Link] (3*Y)
et à tracer
>>> [Link](X,Y,Z)
>>> [Link] ()
7 année 2016/2017
Informatique Introduction à Matplotlib Python scientifique
On redonne l’exemple complet, avec quelques améliorations
import numpy as np
import [Link] as plt
[Link](figsize =(10 ,4)) # pour élargir un peu , la taille est 10*100 x4 *100
N=50
x=[Link] (0,1,N+1)
y=[Link] (0,1,N+1)
X,Y=[Link](x,y) # création des 2 grilles sur x et y
Z=2*X*X+[Link] (3*Y) # valeurs sur la grille
[Link] (1,2,1) # premier graphique
contour=[Link](X,Y,Z ,20) # trace le contour avec 20 lignes et le stocke dans la variable
[Link](contour) # ajoute les étiquettes
[Link]("Des lignes de niveau") # et un titre
[Link] (1,2,2) # deuxième graphique : on remplit
contour=[Link](X,Y,Z ,20) # contour rempli
[Link] () # on ajoute une barre latérale avec les niveaux
[Link]("En couleur")
[Link] ()
Affichage d’une matrice
On utilise matshow sous la forme imshow(matrice,options)
import numpy as np
import [Link] as plt
def f(x,y):
return (2*x-y**2+y)*[Link](-x**2-y**2)
x=[Link] (-2,2,100) # discrétisation de [-2,2]
8 année 2016/2017
Informatique Introduction à Matplotlib Python scientifique
y=[Link] (-2,2,100) # idem
X,Y = [Link](x,y) # création de la grille complète
Z=f(X,Y) # on évalue f sur la grille
[Link](Z,cmap='hot') # image avec les valeurs , style de couleurs 'hot'
[Link] ()
La même vue en 3 dimensions :
On pourra aller sur [Link] pour voir différents styles de
couleurs.
Remarque : la fonction matshow utilise en fait une fonction plus générale, imshow, qui sert à afficher des images
matricielles. Elle l’appelle et ajoute quelques options.
Résumé
9 année 2016/2017
Informatique Introduction à Matplotlib Python scientifique
Quelques fonctions de [Link]
plot(x,y,options) tracé d’une graphique
fill(x,y,options) avec remplissage
hist(...) histogramme
scatter(x,y,options) nuage de points
contour(...), contourf(...) lignes de niveau, contour (plus compliqué)
bar(x,y,width) diagramme en barre
imshow(tableau,options) affiche une image (matricielle)
legend() affichage de la légende
grid() affichage de la grille
gca() système d’axes
show() affichage du graphique
savefig(nom) sauvegarde le graphique dans le fichier nom (s’adapte à l’ex-
tension)
xlabel(texte), ylabel(texte) étiquette abscisses et ordonnées
text(x,y,texte) place un texte sur le graphique
title(texte) titre du graphique
xticks(pos,etiq), yticks(...) points sur l’axe des abscisses : pos : tableau des positions
et etiq : tableau des étiquettes
figure(numero) commence une nouvelle figure
subplot(p,q,n) nouveau subplot en position n sur une grille p × q
axis(xmin,xmax,ymin,ymax) zone d’affichage (sous-graphiques)
Graphiques dans l’espace
Bientôt...
10 année 2016/2017