Pour effectuer le tracé d’une courbe en Python, on aura besoin du module matplotlib et plus particulièrement de sa bibliothèque matplotlib.pyplot.
Beaucoup d’exemples que l’on peut trouver sur Internet couplent ce module avec numpy, mais je trouve cela totalement stupide quand il s’agit de tracer des courbes simples. Nous allons voir pourquoi.
Quelles fonctions appeler pour effectuer un tracé d’une courbe en Python ?
Lors de l’appel à la bibliothèque matplotlib.pyplot, on ne va pas tout importer… car c’est une très mauvaise habitude. Nous allons faire appel uniquement aux fonctions qui nous intéressent : plot (pour tracer les courbes), show (pour afficher le tracé) et éventuellement legend (pour afficher la légende s’il y a plusieurs courbes). On peut aussi ajouter l’appel aux fonctions xlabel et ylabel si toutefois nous souhaitons ajouter une légendes aux axes, et title pour ajouter un titre.
Et maintenant, comment effectuer le tracé ?
Rien de mieux qu’un exemple : j’aimerais tracer la courbe représentative de la fonction \(x \mapsto -\frac{1}{2}g\frac{1}{v_0^2\cos^2\alpha}x^2 + (\tan\alpha)x + y_0\) représentant l’altitude d’un objet lancé d’une hauteur \(y_0\) en adoptant un angle \(\alpha\) avec l’horizontale, et avec une vitesse initiale \(v_0\).
from matplotlib.pyplot import plot, show, legend from math import cos, tan def f(x): alpha = 20 v0 = 10 y0 = 50 g = 10 return -0.5*g*x*x/((v0*cos(alpha))**2) + tan(alpha)*x + y0 x = [ i/100 for i in range(0,3401) ] y = [ f(a/100) for a in range(0,3401) ] plot(x,y,color='orange',label='altitude de l\'objet') legend() show()
qui donne:
Si l’on souhaite ajouter des légendes aux axes ainsi qu’un titre:
from matplotlib.pyplot import plot, show, legend, xlabel, ylabel, title from math import cos, tan, pi def f(x): alpha = 20 v0 = 10 y0 = 50 g = 10 return -0.5*g*x*x/(v0*v0*cos(alpha*pi/180)) + tan(alpha*pi/180)*x + y0 x = [ i/100 for i in range(0,3401) ] y = [ f(a/100) for a in range(0,3401) ] plot(x,y,color='orange',label='altitude de l\'objet') xlabel('distance (en mètre)') ylabel('altitude (en mètre)') title('Trajectoire de l\'objet') legend() show()
Remarquez ici que la courbe est tracée à partir de deux listes :
- une liste nommée x qui contient toutes les valeurs de x que je veux (je l’ai construite par compréhension; pour plus d’explication, voir cette page);
- une liste nommée y qui contient toutes les images des valeurs de x par la fonction f.
Vous voyez donc que le module numpy n’est pas indispensable… contrairement à ce que pourraient vous faire croire bon nombre de tutoriels.
Et pour deux tracés de courbes ?
Il n’y a pas grand-chose qui change : nous allons tout simplement ajouter autant de listes qu’il y a de fonctions. Par exemple, je vais tracer toutes les trajectoires pour un angle variant de 20° à 50° par pas de 10°:
from matplotlib.pyplot import plot, show, legend, xlabel, ylabel, title from math import cos, tan, pi def f(x , alpha, v0 , y0): g = 10 return -0.5*g*x*x/(v0*v0*cos(alpha*pi/180)) + tan(alpha*pi/180)*x + y0 x = [ i/100 for i in range(0,3001) ] c = [ 'orange' , 'red' , 'blue' , 'green' ] i = 0 y = [ ] for a in [ 20 , 30 , 40 , 50 ]: y.append( [ f(j/100 , a , 10 , 50) for j in range(0,3001) ] ) plot( x , y[i] , color = c[i] , label='avec alpha = ' + str(a) ) i += 1 xlabel('distance (en mètre)') ylabel('altitude (en mètre)') title('Trajectoire de l\'objet') legend() show()
N’hésitez pas à consulter la documentation de matplotlib pour en savoir plus.
Brillant tutorial
Merci beaucoup!