Lycée Roland Garros - BCPST 1 Informatique TP INFO n 4 o . Les graphiques avec Python Python permet de produire tous les types de graphiques dont vous pouvez avoir besoin. Nous allons voir dans ce TP comment procéder pour les types de graphiques les plus courants. 1 matplotlib , Les commandes qui permettent de le faire font partie de la librairie 2 plus particulièrement de la sous-librairie matplotlib.pyplot Créez un nouveau script TPgraphiques.py et commencez par importer la bibliothèque nécessaire : I import matplotlib.pyplot as plt Ainsi vous êtes autorisé à utiliser n'importe quelle commande de matplotlib.pyplot, à condition de la faire précéder du préxe plt. La liste de fonctionnalités exposées ici est loin d'être exhaustive, plein d'exemples sur la page web de matplotlib : http ://matplotlib.org/gallery.html 1 La commande plot C'est la commande la plus importante pour tracer des graphiques ! Elle prend en argument deux listes de même taille. La commande plt.plot([x_1,x_2,...x_n],[y_1,y_2,...y_n]) produit l'achage d'une ligne brisée reliant les points (x1 , y1 ), (x2 , y2 ), . . . , (xn , yn ). En clair la première liste est celle des abscisses et la seconde celle des ordonnées. Exemple. Faites : I plt.plot([1,3,-1,4,8],[2,5,4,1,-3]) Remarque. 1. 2. Si l'on ne rentre qu'une seule liste [a1 , a2 , . . . , an ] au lieu de deux, matplotlib = math plot library pyplot : python plot : librairie pour les graphiques mathématiques 1 Python considèrera par défaut qu'il s'agit de la liste des ordonnées et que la liste des abscisses est la liste [1, 2, 3, . . . , n]. C'est très commode car le tracé obtenu représente en fait la suite (an ). Exemple. Fermez la fenêtre graphique puis faites : I plt.plot([1,3,-1,0,1,2,1,-2,1]) Si vous ne fermez pas la fenêtre graphique entre deux plot, les deux graphiques seront superposés et munis de couleurs diérentes. Exemple. Fermez la fenêtre graphique puis faites : I plt.plot([1,2,3,0,4]) I plt.plot([1,3,2,0,1],[5,0,5,3,4]) 2 Tracé d'une fonction Une des utilités principales de plot est de permettre le tracé de la courbe d'une fonction. Soit f une fonction. Pour tracer le graphe de f sur un intervalle [a; b] il faut tracer les points (x, f (x)) avec x qui prend des valeurs entre a et b, susamment proches pour que l'oeil ne remarque pas la discontinuité sur l'écran (c'est-à-dire plus resserrés que la limite imposée par la résolution de l'écran, disons que 10000 points susent amplement). Le moyen le plus simple de créer une telle liste est d'utiliser la commande linspace de la librairie numpy : Exemple. Faites : I import numpy as np I X=np.linspace(2,5,11) I print(X) Faites varier les valeurs pour comprendre ce que fait exactement linspace ! Remarque : X n'est pas une variable de type list : I type(X) X est du type array (tableau en français), ça ressemble à une liste mais ce n'en est pas une. Le type array sera étudié en profondeur plus tard dans l'année. Il permet de faire des opérations élément par élément, ce que ne permettent pas les listes : I Y=np.cos(X) Exemple. Si on veut tracer cos sur [0; 13] on fera : I X=np.linspace(0,13,10000) I Y=np.cos(X) . . . . . . . . . . . . . . . . . . . . . . . . on utilise la commande cos de numpy 2 I plt.plot(X,Y) III Faites vos propres expériences ! Exercice 1 Tracer la fonction x 7→ sin(1/x) pour x ∈ [0, 01; 5] Exercice 2 Tracer, sur un même graphique et sur l'intervalle [−2, 2], la fonction f = exp et les fonctions f0 : x 7→ 1, f1 : x 7→ 1 + x, f2 : x 7→ 1 + x + x2 /2, f3 : x 7→ 1 + x + x2 /2 + x3 /6 Zoomez autour de x = 0. Que constatez-vous ? 3 Paramètres d'achage pour la commande plot De nombreux paramètres d'achage peuvent être modiés pour customiser votre graphique. 3.1 Nuage de points On peut choisir de représenter des points isolés plutôt qu'une ligne brisée (notamment quand on souhaite représenter une suite). Les points sont alors représentés par des marqueurs dont on peut choisir la forme. Exemple. Faites : I C=[np.cos(k) for k in range(1,50)] I plt.plot(C,'.') Fermez la fenêtre puis faites : I S=[np.sin(k) for k in range(1,50)] I plt.plot(C,S,'*') Essayez les marqueurs : 'o', 'v', '4', '+', 'h' . . . il en existe bien d'autres ! 3.2 Couleur, épaisseur On peut aussi gérer, pour une ligne brisée, la couleur et l'épaisseur du trait : Exemple. Faites : I L=[k**2 for k in range(1,5)] 3 I plt.plot(L,linewidth=5) Fermez la fenêtre puis faites : I plt.plot(L,color='r') Fermez la fenêtre puis faites : I plt.plot(L,color='g','') Autres couleurs prédénies : b, c, m, y, k, w. Pour ceux qui connaissent le codage des couleurs RGB (et qui aiment le ranement), on peut choisir précisément n'importe quelle couleur en précisant le triplet RGB. Fermez la fenêtre puis faites : I plt.plot(L,color=(0.2,0.4,0.6)) 3.3 Autres On peut faire apparaître une grille de graduation en faisant : I plt.grid() On peut ajouter un titre en haut du graphique ainsi que des légendes aux axes : I plt.title("MON BEAU GRAPHIQUE\n QU'IL EST BEAU") I plt.xlabel("Axe des abcisses") I plt.ylabel("Axe des ordonnées") On peut également placer plusieurs graphiques sur une même fenêtre avec la commande subplot (en français : sous-graphique ). Dans subplot on précise 3 chires : le nombre de lignes, le nombre de colonnes et le numéro de la case qu'on ouvre. I I I I I I I I I X=np.linspace(0,1,1000) plt.subplot(2,2,1) plt.plot(X,X) plt.subplot(2,2,2) plt.plot(X,X**2) plt.subplot(2,2,3) plt.plot(X,X**3) plt.subplot(2,2,4) plt.plot(X,X**4) On peut écrire dans la fenêtre graphique avec la commande text. Il faut préciser les coordonnées où l'on veut écrire et le texte à écrire. Fermer la fenêtre puis faites : I plt.text(0.2,0.5,'on peut meme faire un $\mu$ ou une $\int f(x)dx$') 4 Il y a même moyen de faire automatiquement une légende bien I I I I I stylée : x=np.linspace(-1,1,100) p1,=plt.plot(x,x**2,'g') p2,=plt.plot(x,x**3,'b') p3,=plt.plot(x,np.exp(x),'o') plt.legend([p1, p2,p3], ["carré", "cube","exponentielle"]) 4 Histogrammes 4.1 La commande hist L'histogramme est un outil représentatif couramment utilisé en statistique. Il permet de visualiser la répartition d'une série de valeurs dans des intervalles donnés. On peut les produire avec la commande hist en Python Commençons par construire aléatoirement un tableau contenant plein de nombres (on anticipe un peu, mais pas besoin de maîtriser cette commande à ce stade de l'année) : I A=np.random.normal (0,1,1000) I print(A) On commence par découper l'intervalle [−5; 5] en 20 sous-intervalles : I subdivision=np.linspace(-5,5,21) I plt.hist(A,subdivision) Alternative : on se contente de donner le nombre N d'intervalles, et Python découpe automatiquement [a; b] en N intervalles de largeurs égales, a et b étant les valeurs minimale/maximale dans A. I plt.hist(A,bins=50) 4.2 La commande bar Cette commande produit un diagramme en bâtons mais dont les hauteurs sont directement spéciées (contrairement à hist où celles-ci étaient calculées à partir des fréquences d'apparition dans la série A). Voici la répartition des mois de naissance de la population française de 1976 (source : INSEE). Jan Fév Mar Avr Mai Jui 4593426 4223840 4699022 4487830 4751820 4435032 Jui Aoû Sep Oct Nov Déc 4540628 4382234 4223840 4171042 4065446 4223840 5 Si l'on veut représenter cette répartition, on fera : I hauteurs=[4593426,4223840,. . . ] (à copier-coller d'après le chier naissances.txt) I plt.bar(range(1,13), hauteurs) Exercice 3 Écrire une fonction coeff_binom(N) sous forme de diagramme qui représente en bâtons les nombres N0 , N1 , N2 , . . . , N . N 5 Représenter un tableau de nombres Le type array rencontré plus haut permet notamment de manipuler de vrais tableaux de nombres (avec lignes et colonnes). On a souvent besoin de représenter de tels tableaux par un code couleur. Un nombre du tableau correspond à une case dans une grille. Créons un tableau de chires au hasard : I A=np.random.randint(0,3,(10,10)) I print(A) On représente ce tableau grâce à la commande matshow : I plt.matshow(A) Remarque. bien sûr, possibilité de changer le code couleur ! 6 Exercices Exercice 4 Créer une fonction monomes(N) qui représente les fonctions x 7→ xk pour k = 1, . . . , N , avec une légende. Par exemple, voici ce que doit produire l'instruction monomes(7) (les courbes ont des couleurs diérentes) : 6 Exercice 5 Soit f : I → I avec I intervalle de R, et la suite récurrente dénie par ( un+1 = f (un ), u0 ∈ R Créez une fonction recurrente(f,u0,N,a,b) qui produit la représentation en escalier de la suite (un ). Plus précisément cette fonction devra : • • • • • tracer le graphe de f entre a et b, tracer la bissectrice d'équation y = x, tracer les deux axes (Ox) et (Oy) en noir, acher une grille de graduation, tracer, avec une ligne continue et des marqueurs (cf. ci-dessous), l'escalier représentant la suite (un ). Par exemple, voici ce que doit produire l'instruction recurrente(np.cos,2,5,-np.pi,np.pi) (np.pi est simplement le nombre π , qui fait partie de la librairie numpy). 7 8