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 évite from numpy import * et from 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")

Graph 1

Deux solutions s'offrent à nous pour affichier le graphique :

  • plt.show() : ouvre une fenêtre intéreactive qui contient le graphique
  • plt.savefig() : permet de sauvegarder le graphique dans un fichier
  • Le comportement de plt.show() peut être modifié, notament avec l'option inline dans IPython ou jupyter 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()

Graph 2

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()

Graph 3

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()

Graph 4

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()

Graph 5

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()

Graph 6

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.

Voir une version dans un jupyter notebook de ces exemples.

results matching ""

    No results matching ""