Vote utilisateur: 5 / 5

Etoiles activesEtoiles activesEtoiles activesEtoiles activesEtoiles actives
 

Algorithmique sous Python : Matplotlib

1. Afficher un nuage de points

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').

 

# Nuages de points

#Pour dessiner un nuage de points : Une liste d'abscisses et une liste de même taille contenant les ordonnées correspondantes. 

import matplotlib.pyplot as plt
fig = plt.figure() # nécessaire sur repl.it

vx=[0,1,2,3,4,5]
vy=[-2,3,4,-1,0,2]

# Optionnel 
axes = plt.gca() # pour travailler sur les axes
axes.set_xlim(0, 6)
axes.set_ylim(-3, 6)

plt.plot(vx,vy,'.',color='red')
# le 3e argument '.' permet de préciser qu'on veut un nuage de points
#plt.plot(vx,vy,'-',color='red') #   ou '-' pour les relier

fig.savefig('graph.png') # nécessaire sur repl.it, sinon simplement plt.show()  

 output 6 0

 

2.  Courbes représentatives de fonctions

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. Histogramme

 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