matplotlib

` L’INFORMATIQUE
INTRODUCTION A
TP5 : UTILISATION DE MODULES
Un module de python est une biblioth`eque o`
u sont rang´ees des fonctions. On l’appelle en d´ebut de
session avec la commande “import module”, et les fonctions sont de la forme “module.fonction”.
Exercice 1. Module random.
Le module random tire des nombres “au hasard”.
random.seed(): engendre une “graine” qui met en route le moteur pseudo-al´eatoire. Il faut commencer par appeler cette fonction en d´ebut de fichier.
random.random(): renvoie un flottant dans [0, 1).
random.randint(a,b): renvoie un entier dans [a, b].
random.randrange(...): prend les mˆemes arguments que range(...) et en renvoie un ´el´ement
au hasard.
´
(1) Ecrire
une fonction qui renvoie une liste de n flottants pris dans [0, 1).
´
(2) Ecrire
une fonction qui renvoie une liste de n points dans le cadrant (0, 0) − (1, 1) du plan.
´
(3) * Ecrire une fonction qui m´elange une liste sur place. Cette op´eration est disponible directement par random.shuffle.
Exercice 2. Module mathplotlib.
Quand le nom du module est trop long, on peut le raccourcir avec “import module as petit-nom”.
On va ici se servir du module matplotlib.pyplot que l’on appelle traditionnellement par
import matplotlib.pyplot as plt
On a alors acc`es aux fonctions d’affichage suivantes :
plt.plot(x,y): quand x et y sont des listes de la mˆeme taille, affiche la courbe affine par morceaux qui passe par les (xi , yi ). Fonction usuelle pour tracer des courbes.
plt.scatter(x,y): affiche les points (xi , yi ) mais sans relier les points.
plt.axis(’equal’): par d´efaut, python ajuste la longueur de chaque axe au dessin demand´e.
Cette commande permet de r´etablir la norme.
plt.show(): affiche les figures dessin´ees jusqu’ici.
plt.savefig(fichier): enregistre la figure dans un fichier. L’extension (png, pdf. . .) indique le
format.
Pour tracer une courbe, on trace en fait une approximation affine par morceaux. On va cr´eer une
liste de valeurs `
a l’aide d’un troisi`eme module, le module numpy (qu’on verra plus tard en cours).
La fonction linspace(a,b,n) de ce module renvoie une liste n points r´epartis r´eguli`erement entre
a et b.
import numpy as np
x = np.linspace(0,30,50)
plt.plot(x, np.sqrt(x))
plt.show()
On peut noter que la fonction np.sqrt s’applique ici `a une liste ! C’est normal (et pratique). 1
1. De fa¸con plus homog`
ene, on aurait pu utiliser la fonction map(f, liste) qui renvoie la liste des f(x) pour
x ∈ liste.
Les fonctions de trac´e (plot, scatter) prennent des options suppl´ementaires, comme par exemple
une couleur bleue avec l’argument suppl´ementaire color = ’blue’. Voir la doc des fonctions pour
plus de d´etails.
(1) Ex´ecuter le code ci-dessus. Constater la diff´erence lorsqu’on ajoute plt.axis(’equal’)
(avant le show()).
(2) Afficher la courbe de sin(x) entre −π et π (np.pi). Faire varier la pr´ecision pour constater
les variations.
Exercice 3. Calcul de π.
On peut tr`es bien tracer de la mˆeme fa¸con une courbe param´etr´ee x(t), y(t). Il suffit de donner
une liste de valeurs pour t, puis de calculer les listes de valeur de xt et yt pour enfin afficher
plt.plot(xt,yt).
Pour tracer juste un point vert aux coordonn´ees x, y, on peut utiliser par exemple la commande
plt.plot(x,y, marker = ’o’, color = ’green’). Lire la documentation pour les diff´erents
marqueurs.
(1) Tracer le cercle de rayon 1 grˆ
ace `a une courbe param´etr´ee.
(2) Tirer des points au hasard dans le carr´e entre les coins (0, 0) et (1, 1). Les colorier en vert
ou rouge selon qu’ils sont dans le cercle unit´e ou non. Quelle est la probabilit´e qu’un point
se retrouve dans le cercle ?
(3) En d´eduire un algorithme probabiliste pour calculer la valeur de π.
Exercice 4. Options de matplotlib.
Pour plus de modifications,
Axes centr´
es en 0: on fait appel `
a l’objet “axe” du dessin.
ax = plt.gca() # "get current axis"
ax.spines[’right’].set_color(’none’) # l’axe de droite est effac´
e (couleur none)
ax.spines[’top’].set_color(’none’)
# idem pour l’axe du haut
ax.xaxis.set_ticks_position(’bottom’) # on ne met que des ´
etiquette sur
# l’axe du bas
ax.spines[’bottom’].set_position((’data’,0))#et l’axe du bas est plac´
e en 0
ax.yaxis.set_ticks_position(’left’) #idem pour l’axe de gauche.
ax.spines[’left’].set_position((’data’,0))
L´
egende: plt.xlabel(’Caf´
e’)
plt.ylabel(’Travail’)
plt.title(’Courbe de productivit´
e’)
Et plus encore : voir http://scipy-lectures.github.io/intro/matplotlib/matplotlib.html#
simple-plot.