Représentation graphique avec matplotlib
Le site de SciPy, propose un cours sur matplotlib
. On trouve de plus une
gallerie bien fournie sur le site de matplotlib d'où on peut extraire de
nombreux exemples :
Cette page donne quelques bases pour démarrer :
Importation
Habituellement on importe matplotlib suivant :
import matplotlib.pyplot as plt
Le module pyplot
contient de nombreuses fonctions pour faire des graphiques
diverses : plot
(simple tracé), pie
(camembert), bar
, hist
(histogramme),
polar
, boxplot
(boîte à moustaches) ... Il existe aussi des fonctions pour
représenter des données en 3D avec visualisation interactive.
Dans IPython ou Jupyter, on peut utiliser la commande magique %pylab
pour
charger scipy
, numpy
et matplotlib
:
In [1]: %pylab --no-import-all inline
--no-import-all
évitefrom numpy import *
etfrom scipy import *
inline
permet d'intégrer les graphiques dans le notebook ou la qtconsole
Exemples :
Ceci est un exemple pas à pas pour démarrer. Reportez-vous à la galerie pour plus d'exemples.
On va tracer la fonction :
Commençons par définir des fonctions
def signal(t):
return np.sin(2 * t) * np.exp(-4e-2 * t)
def envelope(t):
return np.exp(-4e-2 * t)
Remarque : Dans les lignes de code ci-dessous, matplotlib
est importé
en faisant :
import matplotlib.pyplot as plt
Le premier graphique :
La fonction plot
attend simplement comme premier argument l'abscisse et comme
deuxième argument l'ordonnée. On utilise NumPy pour se donner une série de
valeurs de t avec la fonction
np.linspace()
.
t = np.linspace(0, 80, 200)
plt.plot(t, signal(t))
plt.show()
# ou:
# plt.savefig("mongraph.eps")
Deux solutions s'offrent à nous pour affichier le graphique :
plt.show()
: ouvre une fenêtre intéreactive qui contient le graphiqueplt.savefig()
: permet de sauvegarder le graphique dans un fichier- Le comportement de
plt.show()
peut être modifié, notament avec l'optioninline
dansIPython
oujupyter
qui permet d'intégrer les graphiques.
Remarque : Avec NumPy, l'appel de la fonction signal(t)
calcule automatiquement
les valeurs de la fonction pour toutes les valeurs de t.
Avec l'envelope
On ajoute l'envelope :
t = np.linspace(0, 80, 200)
plt.plot(t, signal(t))
plt.plot(t, envelope(t), color="red", linestyle="--")
plt.plot(t, -envelope(t), color="red", linestyle="--")
plt.show()
Ajoutons des informations
On va maintenant ajouter le nom des axes et un titre.
t = np.linspace(0, 80, 200)
plt.plot(t, signal(t))
plt.plot(t, envelope(t), color="red", linestyle="--")
plt.plot(t, -envelope(t), color="red", linestyle="--")
plt.xlabel("temps (s)")
plt.ylabel("Signal (ua)")
plt.title("Ma super fonction amortie")
plt.show()
Et la légende ?
On rajoute la légende.
t = np.linspace(0, 80, 200)
plt.plot(t, signal(t), label="signal")
plt.plot(t, envelope(t), color="red", linestyle="--", label="envelope")
plt.plot(t, -envelope(t), color="red", linestyle="--")
plt.xlabel("temps (s)")
plt.ylabel("Signal (ua)")
plt.title("Ma super fonction amortie")
plt.legend()
plt.show()
Les axes
On ajuste l'échelle des axes :
t = np.linspace(0, 80, 200)
plt.plot(t, signal(t), label="signal")
plt.plot(t, envelope(t), color="red", linestyle="--", label="envelope")
plt.plot(t, -envelope(t), color="red", linestyle="--")
plt.xlabel("temps (s)")
plt.ylabel("Signal (ua)")
plt.title("Ma super fonction amortie")
plt.legend()
plt.xlim((0, 40))
plt.ylim((-1.2, 1.5))
plt.show()
Annotations
On peut ajouter des annotations ou mettre en valeur des points.
t = np.linspace(0, 80, 200)
plt.plot(t, signal(t), label="signal")
plt.plot(t, envelope(t), color="red", linestyle="--", label="envelope")
plt.plot(t, -envelope(t), color="red", linestyle="--")
plt.xlabel("temps (s)")
plt.ylabel("Signal (ua)")
plt.title("Ma super fonction amortie")
plt.legend()
plt.xlim((0, 40))
plt.ylim((-1.2, 1.5))
plt.scatter([25, ], [0, ], s=50)
plt.plot(t, 1 - 4e-2 * t, color="#0C0B0E", linestyle="solid", linewidth=.5)
plt.annotate("Vous avez vu là !!", color="#0C0B0E",
xy=(25, 0), xycoords='data',
xytext=(-40, +60), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.8"))
plt.show()
Conclusion
En conclusion : à vous de jouer. Les exemples ci-dessous devrait vous permettre
de démarrer mais ils sont bien pauvres devant les possibilités de
matplotlib
. Rappelez-vous ce principe simple : il existe certainement dans la
galerie un exemple proche de ce que vous cherchez à faire.