TP n°5 - BCPST1 du lycée Roland Garros

Lycée Roland Garros
BCPST 1ère année
Mathématiques
2014 - 2015
TP 5
. 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.
,
Les commandes qui permettent de le faire font
partie de la librairiematplotlib 1
plus particulièrement de la sous-librairie matplotlib.pyplot . Par conséquent, créez un nouveau script TPgraphiques.py et commencez par écrire
dans la première ligne :
>>> import matplotlib.pyplot as plt
Ainsi vous êtes autorisé à utiliser n'importe quelle commande de matplotlib.pyplot,
et pour le faire vous devrez obligatoirement taper le suxe 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 :
>>> plt.plot([1,3,-1,4,8],[2,5,4,1,-3])
(tous les exemples de ce TP sont à tester dans la fenêtre principale, pas dans
l'éditeur)
1. matplotlib = math plot library
pyplot = python plot
= librairie pour les graphiques mathématiques
1
Si l'on ne rentre qu'une seule liste [a1 , a2 , . . . , an ] au lieu de deux, Python
considèrera par défaut que la première liste est la liste [1, 2, 3, . . . , n], de sorte
que le tracé représentera la suite (an ).
Exemple.
Fermez la fenêtre graphique puis faites :
>>> 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 :
>>> plt.plot([1,2,3,0,4])
>>> 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 :
>>> import numpy as np
>>> X=np.linspace(2,5,11)
>>> print(X)
Faites varier les valeurs pour comprendre ce que fait exactement linspace !
Remarque : X n'est pas une variable de type list :
>>> type(X)
X est du type array (tableau en français), ça ressemble à une liste mais ce n'en
est pas une. C'est beaucoup plus pratique qu'une liste car avec un tableau on
peut faire directement les opérations élément par élément (contrairement aux
listes) :
>>>
>>>
>>>
>>>
2*X
X+1
X**2
np.cos(X)
2
Exemple.
Si on veut tracer cos sur [0; 13] on fera :
>>> X=np.linspace(0,13,10000)
>>> Y=np.cos(X) . . . . . . . . . . . . . . . . . . . . on utilise la commande exp de numpy
>>> 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, la fonction f = exp et les fonc-
tions
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 :
>>> C=[np.cos(k) for k in range(1,50)]
>>> plt.plot(C,'.')
Fermez la fenêtre puis faites :
>>> S=[sin(k) for k in range(1,50)]
>>> 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 :
>>> L=[k**2 for k in range(1,5)]
>>> plt.plot(L,linewidth=5)
3
Fermez la fenêtre puis faites :
>>> plt.plot(L,color='r')
Fermez la fenêtre puis faites :
>>> 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 :
>>> plt.plot(L,color=(0.2,0.4,0.6))
3.3
Autres
On peut faire apparaître une grille de graduation en faisant :
>>> plt.grid(True)
On peut ajouter un titre en haut du graphique ainsi que des légendes aux
axes :
>>> plt.title("MON BEAU GRAPHIQUE\n QU'IL EST BEAU")
>>> plt.xlabel("Axe des abcisses")
>>> 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.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
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 :
>>> plt.text(0.2,0.5,'on peut meme faire un $\mu$ ou une $\int f(x)dx$')
On peut même faire une légende bien stylée :
>>> x=np.linspace(-1,1,100)
4
>>>
>>>
>>>
>>>
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. . . pas besoin de connaître cette commande pour l'instant) :
>>> A=np.random.normal (0,1,1000)
>>> print(A)
On commence par découper l'intervalle [−5; 5] en 20 sous-intervalles :
>>> subdivision=np.linspace(-5,5,21)
>>> 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.
>>> 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
Si l'on veut représenter cette répartition, on fera :
5
>>> hauteurs=[4593426,4223840,. . . ] . . . . . . bon courage pour la saisie :-)
>>> plt.bar(range(1,13), hauteurs)
Écrire une fonction coeff_binom(N)
sous forme
N N qui représente
N
N
de diagramme en bâtons les nombres 0 , 1 , 2 , . . . , N .
Exercice 3
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 pour les besoins de l'exemple (pas
besoin de retenir cette méthode pour l'instant, on fait ça juste pour construire
un exemple)
>>> A=np.random.randint(0,3,(10,10))
>>> print(A)
On représente ce tableau grâce à la commande matshow :
>>> plt.matshow(A)
Remarque : bien sûr, possibilité de changer le code couleur !
6 Activité 1
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
7 Activité 2
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