Imprimer
Affichages : 5756

Vote utilisateur: 5 / 5

Etoiles activesEtoiles activesEtoiles activesEtoiles activesEtoiles actives
 

Algorithmique sous Python : Matplotlib

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

 matplotlib

 

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

 output 9 0

 

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

 graph1

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

 graph3

 

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

 

graph2

 

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

 diagramme

 

Liens externes 

 

Articles Connexes