La bibliothèque matplolib
est très utile pour tracer des graphiques.
Tracer un graphique avec python suppose de disposer d'un nuage de points dont les abscisses et les ordonnées sont rangées dans deux listes distinctes.
Par exemple, pour tracer la courbe représentant les variations d'une tension $\mathsf{u(t) = 3 cos(1. 10^3 t + 0,25)}$ au cours du temps, alors il faut créer :
La création de la liste des temps peut se faire de manière automatique grâce à la commance linspace
de la bibliothèque numpy
. Celle-ci nécessite trois arguments np.linspace(borne_inferieure , borne_superieure , nombre de points)
.
La liste des ordonnées associées s'obtient grâce à la définition de la fonction $\mathsf{u(t)}$ :
#La fonction cosinus doit être extraire d'une bibliothèque comme numpy ou math
def u(t) :
return 3 * np.cos(1E3 * t + 0.25)
Y = [u(x) for x in X]
Le tracé s'obtient alors au moyen de la commande plt.plot(X,Y)
.
import matplotlib.pyplot as plt
import numpy as np
def u(t) :
return 3 * np.cos(1E3 * t + 0.25)
X=np.linspace(0,1E-2,100)
Y = [u(x) for x in X]
plt.plot(X,Y)
Si deux fonctions doivent être tracées sur le même graphique, il faut répéter l'écriture de la commande plt.plot(abs,ord)
autant de fois qu'il y a de courbes à tracer.
L'exemple ci-dessous montre d'ailleurs comment créer une liste d'ordonnées sans passer par la création d'une fonction.
import matplotlib.pyplot as plt
import numpy as np
X=np.linspace(0,1E-2,100)
Y1 = [3 * np.cos(1E3*x + 0.25) for x in X]
Y2 = [2.5 * np.cos(1E3*x - 1.1) for x in X]
plt.plot(X,Y1)
plt.plot(X,Y2)
Pour chaque courbe, il est possible d'imposer une couleur, un marqueur, une épaisseur, une étiquette sous la forme :
plt.plot(X,Y,'CouleurMarqueur,width='epaisseur',label='titre')
Les couleurs peuvent être indiquées au moyen de lettres :
b
= bleu,r
= rouge,g
= green,k
= noir,y
= jaune, Les marqueurs sont associés à des signes :
+
= croix verticale,x
= croix oblique,.
= point,o
= rond plein,-
= trait plein,--
= pointillé,La taille du marqueur peut être spécifiée à l'aide de l'option markersize
, l'épaisseur d'une ligne ou de pointillés sous la forme linewidth=2
.
L'étiquette sous forme d'une chaîne de caractère : label='nom courbe'
.
Le rendu esthétique du graphique est amélioré par l'addition de commandes :
plt.title("Titre")
plt.axhline()
plt.grid()
plt.xlabel("Titre abscisse")
ou d'ordonnée plt.ylabel("Titre ordonnée")
plt.xlim(borne_inf,borne_sup)
ou d'ordonnée plt.xlim(borne_inf,borne_sup)
plt.legend()
Toutes ces commandes peuvent être améliorées grâce à des arguments optionnels. Un simple clic sur le nom de la commande permet d'accéder aux options disponibles.
import matplotlib.pyplot as plt
import numpy as np
X=np.linspace(0,1E-2,100)
Y1 = [3 * np.cos(1E3*x + 0.25) for x in X]
Y2 = [2.5 * np.cos(1E3*x - 1.1) for x in X]
plt.figure(1)
plt.plot(X,Y1,'b--',linewidth=1,label="tension d'entrée")
plt.plot(X,Y2,'r+',markersize=2,label="tension de sortie")
plt.xlabel('temps (s)')
plt.ylabel('tension (V)')
plt.axhline()
plt.legend()
plt.grid(rue)
plt.show()
Il est possible d'imposer une organisation de graphiques verticalement et horizontalement, notamment pour faciliter des comparaisons. Cela est rendu possible par l'utilisation de commande plt.subplot(NbeLignes,NbeColonnes,Position)
.
import matplotlib.pyplot as plt
import numpy as np
X=np.linspace(0,1E-2,100)
Y1 = [3 * np.cos(1E3*x + 0.25) for x in X]
Y2 = [2.5 * np.cos(1E3*x - 1.1) for x in X]
plt.subplot(121) #1 ligne, 2 colonnes, position n°1
plt.plot(X,Y1,'b--',label="tension d'entrée")
plt.plot(X,Y2,'r-',label="tension de sortie")
plt.xlabel('temps (s)')
plt.ylabel('Ue (V)')
plt.title("Mode temporel")
plt.axhline(y=0,linewidth=3)
plt.grid()
plt.subplot(122) #1 ligne, 2 colonnes, position n°2
plt.plot(Y1,Y2,'--',label="Mode XY")
plt.xlabel('Ue (V)')
plt.ylabel('Us (V)')
plt.title("Mode XY")
plt.grid()
plt.show()
Il faut cette fois changer la commande plt.plot(X,Y)
par plt.errorbar(X,Y, xerr= ,yerr= ,fmt='o')
:
xerr
attend l'amplitude des barres d'erreur en abscisse,yerr
attend l'amplitude des barres d'erreur en ordonnée,fmt
correspond à la consigne sur le format du point.import matplotlib.pyplot as plt
import numpy as np
X=np.linspace(0,2E-3,10)
Y1 = [2.5 * np.cos(1E3*x - 1.1) for x in X]
plt.figure(1)
plt.errorbar(X,Y1,yerr=.2,fmt='x',markersize=8,label="tension d'entrée")
plt.xlabel('temps (s)')
plt.ylabel('Ue (V)')
plt.title("Avec barres d'erreur pour la grandeur en ordonnée")
plt.grid()
plt.show()