MPSI2 Graphiques en Python Informatique Le module matplotlib.pyplot permet de tracer des courbes. Dans toute la suite, on considère que l’on a importé les modules suivants : import matplotlib.pyplot as plt import numpy as np 1 Comment procéder • Pour tracer des graphiques avec matplotlib, on écrit des directives pour construire une figure morceaux par morceaux : courbes, axes, graduations, grille, titre... Jusque-là rien ne s’affiche : la figure est construite en mémoire. • On affiche ensuite la figure avec la directive plt.show(), une nouvelle fenêtre s’ouvre avec la figure affichée. • À ce moment-là, le programme est interrompu jusqu’à ce que l’on referme la fenêtre graphique. C’est pour cela, qu’en général, l’instruction plt.show() est la dernière instruction du programme. • La façon normale de procéder par étapes est donc la suivante : on exécute un programme terminé par plt.show(), on observe le graphique, on referme la fenêtre graphique, on modifie le programme, on le réexécute... • La fenêtre graphique contient des boutons pour déplacer le graphique et zoomer. • On peut enregistrer le graphique dans un fichier, sous de nombreux formats (jpg, png, pdf, svg, gif, tif) suivant l’extension que l’on met dans le nom du fichier : -soit on utilise le bouton d’enregistrement dans la fenêtre graphique -soit on met dans le programme la directive plt.savef ig(0 nomduf ichier0 ). 2 La commande plot • La commande fondamentale pour tracer une courbe est : plt.plot(x, y, options) avec : I x et y des tableaux numpy à une dimension. I Le troisième paramètre (options) est facultatif, il permet de choisir l’apparence du trait, l’épaisseur, la couleur... On obtient une ligne brisée joignant les points de coordonnées (x[i], y[i]). S’il y a suffisamment de points, la ligne brisée obtenue aura l’apparence d’une courbe. • Voici un exemple où l’on trace les courbes représentatives des fonctions sinus et cosinus sur l’intervalle [−4π, 4π] en prenant 100000 points. Exemple : >>> x = np.linspace(−4 ∗ np.pi, 4 ∗ np.pi, 100000) >>> y = np.sin(x) >>> z = np.cos(x) >>> plt.plot(x, y) >>> plt.plot(x, z) >>> plt.show() La commande np.linspace(−4 ∗ np.pi, 4 ∗ np.pi, 100000) permet de créer une liste de 100000 réels régulièrement espacés dans l’intervalle [−4π, 4π]. On utilise la fonction np.sin pour appliquer la fonction sinus à tout le tableau de points. Une fenêtre s’ouvre avec le graphique suivant : 1.0 0.5 0.0 0.5 1.015 10 5 0 1 5 10 15 Chapitre 5 MPSI2 Graphiques en Python Informatique • On peut bien entendu créer une fonction autre que celles qui existent déjà dans numpy pour la tracer. Exemple : def f 1(x) : return(np.log(x + np.sqrt(x ∗ ∗ 2 + 1))) x = np.linspace(−10, 10, 10000) plt.plot(x, f 1(x)) plt.show() 3 2 1 0 1 2 310 3 5 0 5 10 Options de la commande plot • On peut modifier le motif des points : ’.’ pour un petit point ’o’ pour un gros point ’+’ pour une croix ’*’ pour une étoile ’-’ les points sont reliés par des segments ’- -’ les points sont reliés par des segments en pointillés ’-o’ gros points reliés par des segments (on peut combiner les options) ’b’, ’r’, ’g’, ’y’, ’c’, ’m’ pour de la couleur (bleu, rouge, vert, jaune, cyan, magenta...) Cette liste n’est pas exhaustive, vous trouverez de plus amples informations ici : http ://matplotlib.org/api/pyplot api.html#matplotlib.pyplot.plot • En pratique, voici comment s’utilisent ces options : Exemple : x = np.linspace(−4, 4, 1000) plt.plot(x, np.sin(x + 1), color = ’blue’, linewidth = 3, linestyle = ’ − ’) I color permet de choisir la couleur. I linewidth permet de choisir l’épaisseur du trait en points, cette valeur est égale à 1 par défaut. I linestyle permet de choisir le motif des lignes, ligne pleine par défaut. 2 Chapitre 5 Graphiques en Python MPSI2 Informatique 1.0 0.5 0.0 0.5 1.0 4 3 2 1 0 1 2 3 4 Remarque : On peut abréger la commande : plt.plot(x, y, color = ’blue’, linestyle = ’ − ’) en plt.plot(x, y, ’ − b’). Mise en forme d’un graphique Voici quelques commandes qui permettent de mettre en forme un graphique, la liste n’est pas exhaustive. Exemple : x = np.linspace(−2, 4, 1000) plt.axis(0 equal0 ) # repère orthonormé plt.plot(x, np.sin(x + 1), color = ’blue’, linewidth = 3, linestyle = ’ − ’), label = ’sin(x + 1)’) plt.plot(x, np.sin(x + 2), color = ’red’, linestyle = ’ − −’), label = ’sin(x + 2)’) plt.plot(x, np.sin(x + 3), color = ’red’, linestyle = ’ − .’), label = ’sin(x + 3)’) plt.legend(loc = ’upper right’) # localisation de la légende donnée par l’instruction label plt.xlabel(’abscisses’) # légende pour l’axe des abscisses plt.ylabel(’ordonnees’) # légende pour l’axe des ordonnées plt.title(’Des sinusoides’) #titre de la figure plt.text(−1, 2, 0 T rois courbes0 ) # texte sur le graphique avec son positionnement plt.xticks([−np.pi / 2, 0, np.pi / 2, np.pi]) # abscisses qui vont figurer dans le graphique plt.yticks([−1, 0, 1]) # ordonnées qui vont figurer dans le graphique plt.grid(T rue) # ajout d’une grille plt.show() Des sinusoides sin(x+1) sin(x+2) sin(x+3) Trois courbes 1 ordonnees 4 0 1 1.571 0.000 1.571 abscisses 3 3.142 Chapitre 5 Graphiques en Python MPSI2 5 Informatique Compléments • Il est également possible de tracer des courbes paramétrées. Exemple : T = np.linspace(0, 8 ∗ np.pi, 1000) X = [t ∗ np.cos(t) f or t in T ] Y = [t ∗ np.sin(t) f or t in T ] plt.plot(X, Y ) plt.show() 30 20 10 0 10 20 3030 20 10 0 10 20 30 On a représenté la courbe paramétrique, pour t ∈ [0, 8π], d’équation : x(t) = t cos(t) y(t) = t sin(t) 4 Chapitre 5