Algorithmique sous Python : Matplotlib
- Pour tout savoir sur Python : Python au Lycée
- Fiche de math93 : Matplotlib et les graphiques.
1. Afficher un nuage de points avec matplotlib
On peut facilement tracer les nuages de points correspondants à une fonction définie, en utilisant les fonctions du module matplotlib.
Documentation : https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html#matplotlib.pyplot.hist
Sous repl ou de nombreux logiciels online, il faut convertir le fichier en image avec l'instruction fig = plt.figure() et la sauvegarder sous un nom avec l'instruction fig.savefig('graph.png').
mport matplotlib.pyplot as plt fig = plt.figure() # nécessaire sur repl.it vx=[0,1,2,3,4,5] # liste des abscisses des points vy=[-2,3,4,-1,0,2] # liste des ordonnées des points # Optionnel axes = plt.gca() # pour travailler sur les axes axes.set_xlim(0, 6) axes.set_ylim(-3, 6) # Pour tracer tous les points plt.plot(vx,vy,'.',color='red') # le 3e argument '.' permet de préciser qu'on veut un nuage de points # Pour tracer un segment [AB] avec A(1,2) et B(3,4) xa=1 ya=2 xb=3 yb=4 plt.plot([xa,xb],[ya,yb],'-',color='red') # ou '--' en pointillé # Pour tracer un segment [AC] avec A(1,2) et C(5,2) xa=1 ya=2 xc=5 yc=2 plt.plot([xa,xc],[ya,yc],'--',color='blue',lw=2) # ou '-' en trait plein, lw=épaisseur fig.savefig('graph.png') # nécessaire sur repl.it, sinon simplement plt.show()
2. Courbes représentatives de fonctions avec matplotlib
Pour le tracé de graphes de fonctions, le module matplotlib est classique. Dans l'exemple suivant, on construit des courbes représentatives de 5 façons différente avec la fonction plot dont la documentation est ici : https://matplotlib.org/2.0.2/api/_as_gen/matplotlib.axes.Axes.plot.html
import matplotlib.pyplot as plt import numpy as np from math import * def f(x): return x*x/10 def g(x): return -x**2/10 def h(x): return -x/3 X = np.linspace(-np.pi, np.pi, 100) # une liste de 100 valeurs entre -pi et pi Y = np.sin(X) # ne fonctionne pas avec sin(X), il faut utiliser np.sin(X) Z=[f(i) for i in X] W=g(X) # ne fonctionne pas avec cos(X), il faut utiliser np.cos(X) # plt.plot(X, Y, color="blue", linewidth=1.5, linestyle="-") plt.plot(X, np.cos(X),color="red", linewidth=3) plt.plot(X, [f(x) for x in X],color="orange", linewidth=5) plt.plot(X, W, linewidth=3) # si on ne définit pas de couleur, elle est donnée automatiquement et différente des précédentes plt.plot(X, h(X),color="green", linewidth=3) plt.savefig("graph") # sauvegarde l'image sous le nom graph.png
- Lien : https://repl.it/
On peut aussi redéfinir les axes.
from matplotlib.ticker import MultipleLocator, FormatStrFormatter ax = plt.gca() ax.xaxis.set_major_locator(MultipleLocator(1)) ax.xaxis.set_minor_locator(MultipleLocator(0.5)) plt.axhline(color = 'k') # axe des abscisse plt.axvline(color='k') # axe des ordonnées ax.spines['bottom'].set_position(('data',0)) # pour redéfinir l'axe des abscisses ax.spines['left'].set_position(('data',0)) # pour redéfinir l'axe des ordonnées
Remarque : Pour afficher plusieurs courbes dans différents graphiques
Dans la commande plt.subplot l’argument est nbre de lignes, nbre de colonnes, numéro de la figure. Il y a une condition à respecter : le nombre de lignes multiplié par le nombre de colonnes est supérieur ou égal au nombre de figure. Ensuite Matplotlib place les figures au fur et à mesure dans le sens des lignes.
import numpy as np import matplotlib.pyplot as plt def f(t): return np.exp(-t) t1 = np.arange(0.0, 5.0, 0.1) plt.subplot(221) # 1re figure plt.plot(t1, f(t1), 'bo') plt.subplot(222) # 2e figure plt.plot(t1, f(t1), 'r--') plt.subplot(223) # 3e figure plt.plot(t1, f(t1), 'b-') plt.subplot(224) # 4e figure avec 2 courbes plt.plot(t1, f(t1), 'k',color='red') plt.plot(t1, t1**2, 'k',color='green') plt.savefig("graph")
Liens externes sur la représentation de courbes :
3. Tracer un cercle avec matplotlib
# Tracer un cercle avec matplotlib import matplotlib.pyplot as plt fig = plt.figure() # nécessaire sur repl.it # Le centre du cercle A(10 ; 10) plt.plot(10,10,'.',color='blue') # On défini le cercle de centre A(10 ; 10) et rayon 5 cercle = plt.Circle((10,10),radius=5 , color='g', fill=False) # pour afficher le cercle # Pour ne pas avoir de déformation (sinon on a l'impression d'avoir une ellipse) ax=plt.gca() ax.add_patch(cercle) plt.axis('scaled') # Affichage fig.savefig('graph.png') # nécessaire sur repl.it, sinon simplement plt.show()
4. Histogramme avec matplotlib
On utilise la fonction bar dont la documentation est ici : https://matplotlib.org/2.0.2/api/pyplot_api.html#matplotlib.pyplot.hist
import numpy as np import matplotlib.pyplot as plt fig = plt.figure()# pour repl.it x = [1, 2, 2, 3, 4, 4, 4, 4, 4, 5, 5,0] plt.hist(x , 20, density=0, facecolor='b',align='mid') # Le 2e argument donne l'espace entre les données # density = 1 : pour les fréquences # density = 0 : pour les occurences plt.xlabel('valeurs') plt.ylabel('nombres') plt.title('Exemple d\' histogramme simple') fig.savefig('graph.png') # ou plt.show() sur Spyder
- Lien : https://repl.it/
4. Diagramme en batons
On utilise la fonction bar dont la documentation est ici : mathplotlib : bar.
#Mathplotlib : diagramme en baton from matplotlib.pyplot import * from random import * X = [0,1,2,3,4,5,6,7,8,9,10,11,12] L = [0,0,0,0,0,0,0,0,0,0,0 ,0 ,0 ] for i in range(100): double_de=randint(1,6)+randint(1,6) L[double_de]=L[double_de]+1 bar(X,L) savefig("diagramme") # ou show()
Liens externes
- Mathplotib et plot : https://matplotlib.org/2.0.2/api/_as_gen/matplotlib.axes.Axes.plot.html
- Mathplotlib et hist : https://matplotlib.org/2.0.2/api/pyplot_api.html#matplotlib.pyplot.hist
- Mathplotlib et bar : mathplotlib : bar.
- Mathplotlib commands summary : https://matplotlib.org/2.0.2/api/pyplot_summary.html