Chapitre 10 : utilisation graphique de pylab (Module contenant numpy et matplotlib.pyplot) Table des matières 1 Premiers tracés 1 1.1 Rappel : comment marche plot?............................... 1 1.2 Pour le tracé de fonctions : comment fabriquer le tableau des abscisses........ 2 1.3 Effacement, gestion de plusieurs fenêtres :.......................... 3 1.4 Commandes pour les axes, la couleur, le style........................ 3 1.4.1 Quelques commandes pour les axes......................... 3 1.4.2 Quelques commandes pour les couleurs et les styles................ 3 1.4.3 Remarque générale sur les arguments de plot, et de beaucoup de fonctions Python :........................................ 4 1.5 Deux tracés sur la même figure avec une légende...................... 4 2 Cas particuliers des suites, un plot à un argument! 4 3 Apprentissage des courbes paramétrées 5 3.1 L exemple d un mouvement circulaire uniforme :..................... 6 3.2 Le même tracé en repère orthonormé............................ 6 3.3 Propriétés de symétries des courbes paramétrées...................... 6 3.3.1 Effet de la périodicité (commune) de t x(t) et t y(t)............ 6 3.3.2 Cas d un décalage par périodicité........................... 6 3.4 Effet de la parité/imparité................................... 6 3.5 Exemple des courbes de Lissajous............................... 7 Introduction Les modules numpy et matplotlib qui nous allons utiliser sont regroupés dans un module appelé pylab. Ces modules visent à développer des outils de calculs numériques et d affichage graphique en Python, analogues à ceux fournis par les logiciels de références que sont Matlab et son avatar libre Scilab. Dans ce qui suit j utiliserai donc import pylab as pl. Le but du chapitre étant plutôt les tracés que l utilisation intensive des tableaux numpy, on rappellera simplement au fur et à mesure les notions nécessaires sur ces tableaux. 1 Premiers tracés 1.1 Rappel : comment marche plot? On a déjà vu en T.P. que plot s utilise avec la syntaxe : pl.plot(x,y) où x et y sont ou bien des listes (ou tuple) python, ou bien des tableaux numpy de même taille et qu à partir de ces données, plot trace la ligne brisée qui joint les point M I de coordonnées x[i],y[i] dans l ordre des i croissants. Ainsi : x=[0,1,2] y=[1,2,1] pl.plot(x,y) 1
1.2 Pour le tracé de fonctions : comment fabriquer le tableau des abscisses Admettons qu on veuille tracer le graphe de la fonction x x 2 sur [0, 1]. On va pour cela découper le segment [0, 1] en disons en 11 points espacés régulièrement autrement dit avec un pas p = 0.1 Plusieurs méthodes sont possibles : On peut bien sûr créer à la main une liste python. Comment? La commande linspace de numpy (incluse dans pylab) qui crée un array : L acronyme linspace est pour linear space. x=pl.linspace(0,1,11) D une manière générale, linspace(a,b,n) subdivise le segment [a, b] en n points régulièrement espacés, donc avec un pas (b a)/(n 1). La commande arange de numpy (incluse dans pylab) qui crée un array : Il s agit encore d un acronyme pour array range. Elle s utilise comme le range des listes sauf qu elle crée un array et permet des pas qui sont des flottants. Ainsi pl.arange(a,b,p) crée le tableau des a + kp jusqu au plus grand k tel que a + kp < b. Ainsi pour obtenir la même subdivision de [0, 1] on entrera : x=pl.arange(0,1.1,0.1) 2
Reste ensuite à définir le vecteur y : Les fonctions de numpy (ou pylab) opèrent directement sur les tableaux Ainsi à partir du tableau x (pas d une liste), on peut créer la liste y dont les entrées y[i] sont les x[i]**2 simplement via : y=x**2 Puis enfin faire plot(x,y). 1.3 Effacement, gestion de plusieurs fenêtres : Pour effacer le graphique précédent : pl.clf() # clf pour clear figure Pour afficher dans une autre fenêtre : pl.figure(1) # on crée une figure qu on appelle 1 pl.plot(x,x) pl.figure("ma jolie parabole") # on crée une figure qu on appelle... pl.plot(x,y) 1.4 Commandes pour les axes, la couleur, le style Reprenons à tire d exercice un autre exemple déjà vu : celui du sin sur [0, 2π]. Exercice : Comment faire ce tracé? 1.4.1 Quelques commandes pour les axes Par défaut, le cadrage ne collera pas forcément à ce qu on voudrait. On peut déclarer pl.xlim(0,2*pl.pi) On peut donner faire afficher des étiquettes sur les axes : pl.xlabel(" temps t") pl.ylabel(" tension u(t)") 1.4.2 Quelques commandes pour les couleurs et les styles Les huit couleurs de base : avec leur première lettre. Ainsi plot(x,y,"r--"). Pour des couleurs plus compliquée, on va définir color= " " dans plot, notamment pour : Les couleurs en RGB : même syntaxe qu en HTML : avec trois nombres en hexadécimal : exemple pl.plot(x,y,color= #eeee00 ) donnera la courbe en... 3
1.4.3 Remarque générale sur les arguments de plot, et de beaucoup de fonctions Python : Lorsque vous tapez plot vous voyez : Qu est-ce que cela signifie? Le premier *args signifie que le nombre d arguments de plot n est pas toujours le même. Ainsi, on a utilisé plot(x,y) avec deux arguments, et plot(x,y, r- ) avec trois arguments. On verra même plus tard qu on peut même ne donner qu un argument! Comment fabriquer soi-même des fonctions avec des *arg? Avec un * devant votre nom d argument. Dans ce cas, tous les arguments donnés entre virgule seront stocké dans un tuple, comme expliqué ici : def mafonction(*mesarguments): return mesarguments Le second kwargs signifie key word arguments : ce sont des arguments définis par un mot-clef. Comme color dans notre exemple. Là aussi, on va voir que plot peut en admettre beaucoup. 1.5 Deux tracés sur la même figure avec une légende x=pl.linspace(0,2*pl.pi,100) y1=pl.sin(x) y2=pl.cos(x) pl.clf() pl.plot(x,y1,"r",label="le sinus") pl.plot(x,y2,"b-",label="le cosinus") pl.legend() Avec le résultat : 2 Cas particuliers des suites, un plot à un argument! Les suites n u n sont bien sûr des fonctions particulières, dont la variable n est un entier. On peut bien sûr tracer les par exemple les 1000 premières valeurs de la suite (sin(n)) en faisant : Mais on peut faire la même chose en faisant simplement pl.plot(y) : 4
s il n y a qu un argument, plot prendra par défaut comme tableau des abscisses le tableaux des entiers successifs, à partir de 0, de même longueur que y. Ceci peut paraître une simple curiosité, mais cela peut vous jouer des tours parfois... si vous appliquer votre plot à certaines valeurs de retour d une fonction... Remarque : comment peut-on illustrer la densité de {sin(n), n N} dans [ 1, 1], en dessinant tous ces points sin(n) sur le segment [ 1, 1]? Voici ci-dessous le dessin pour seulement les 100 premières valeurs de n : la densité n est pas évidente, elle le devient pour 1000 : Un autre exemple : une suite géométrique Si on veut tracer les cinquante premières valeurs de (u n ) = (q n ) pour q = 0, 9, on peut bien sûr : (M1) définir la liste (ou le tableau) u à l aide d une boucle. (M2) utiliser le paradigme de numpy qui veut que les fonctions usuelles s appliquent à des tableaux. Ainsi si x et y sont deux tableaux, on peut fabriquer x**y qui est le tableau dont les entrées sont les x[i]**(y[i]). Ici pour notre suite on peut ansi définir : N=50 q=pl.ones(n) # tableau de N fois 1 q=-0.9*q # multiplication du tableau par un scalaire : donne un tableau constant de -0,9 valeurs=pl.arange(0,50,dtype=int) u=q**valeurs pl.plot(u) 3 Apprentissage des courbes paramétrées Définition : Tracer une courbe paramétrée plane est tracer l ensemble des points M(t) = (x(t), y(t)) où t x(t) et t y(t)) sont des fonctions quelconques. L essentiel : la variable t ne se voit pas sur la figure. On peut penser que c est le temps. 5
3.1 L exemple d un mouvement circulaire uniforme : x = cos(3t) Supposons que le mouvement d un mobile M(t) en fonction du temps t est défini par y = sin(3t) mouvement circulaire uniforme. Pour afficher la trajectoire avec plot : : t=pl.linspace(0,2*pl.pi,100) x=pl.cos(3*t) y=pl.sin(3*t) plot(x,y) Problème : on voit un ovale au lieu d un cercle, il nous faut encore améliorer la gestion des axes 3.2 Le même tracé en repère orthonormé Il suffit de rajouter pl.axis( equal ) Un enjeu pour les courbes paramétrées : savoir suivre l évolution du point mobile dans le temps. sur la trajectoire Pour cela, on peut : faire un tableau de variation donnant la monotonie des deux fonctions t x(t) et t y(t). Illustration sur le cas du cercle. On peut aussi marquer le vecteur vitesse, qui est le vecteur v (t) = (x (t), y (t)), et qui est tangent à la courbe, dirigé dans le sens des t croissants. 3.3 Propriétés de symétries des courbes paramétrées 3.3.1 Effet de la périodicité (commune) de t x(t) et t y(t) Si x( ) et y( ) sont T périodiques et si on trace la trajectoire correspondant aux t [0, T ] alors : x(t) = a cos(t), Exemple des mouvement elliptiques : y(t) = b sin(t). 3.3.2 Cas d un décalage par périodicité Si on a un T tel que pour tout t R, x(t + T ) = x(t) + α avec α fixé, et y(t + T ) = y(t) + β avec β fixé, alors à partir du tracé de la trajectoire pour t [0, T ], on obtiendra toute la courbe par Exemple de la cycloïde : x(t) = t sin(t), y(t) = 1 cos(t). Question : Que dire du vecteur vitesse du point sur la cycloïde au temps t = 2kπ avec k Z? Comment connaître alors la tangente à la courbe en ces points? 3.4 Effet de la parité/imparité Dans ce qui suit, on notera M(t) = (x(t), y(t)) le point courant au temps t. a) Si x et y sont paires et si on trace la trajectoire pour t 0 alors pour avoir le reste de la trajectoire, il suffit de? b) Si x et y sont impaires et si on trace la trajectoire pour t 0 alors pour avoir le reste de la trajectoire, il suffit de? 6
c) Si x est impaire et y est paire et si on trace la trajectoire pour t 0 alors pour avoir le reste de la trajectoire, il suffit de? d) Si y est impaire et x est paire et si on trace la trajectoire pour t 0 alors pour avoir le reste de la trajectoire, il suffit de? 3.5 Exemple des courbes de Lissajous x(t) = a sin(pt), On désigne ainsi une famille de courbes paramétrées contenant les courbes de la forme y(t) = b sin(qt + ϕ), où p et q sont des entiers et a, b, ϕ des réels. Question : d une manière générale quelle est, en fonction des entiers p et q, la valeur de T telle qu on ait parcouru une et une seule fois la trajectoire si t [0, T ]. Exercice : Tracer ces courbes pour (p, q) {(1, 2), (3, 2), (3, 4), (5, 4)}, a = b = 1 et ϕ = 0 sans répéter quatre fois les instructions (boucle). Suivre l évolution des points sur le tableau de variation double et expliquer les propriétés de symétries de chaque courbe. 7