Découverte de matplotlib

Introduction :

Parfois il peut être utile de visualiser des données et notamment sous forme de graphique.

Une des bibliothèques utilisée pour ça c’est matplotlib. (documentation : https://matplotlib.org/ )

Comme d’habitude : pip install matplotlib

Comment ça marche ? Commençons par un exemple :

from matplotlib import pyplot as plt
x = [1, 2, 3, 6]
y = [1, 4, 9, 36]
plt.plot(x, y)
plt.show()

Vous devriez obtenir la résultat suivant :

Il existe de nombre argument qu’on peut passer à la méthode plot. En voici quelques uns :

from matplotlib import pyplot as plt
# Liste des points
x = [1, 2, 3, 6]
y = [1, 4, 9, 36]
plt.title('Mon beau graphe')
# Création du graphe
plt.plot(
x,
y,
color = 'red',              # Couleur du trait
linestyle = 'dashed',       # Style du trait
linewidth = 1,              # épaisseur du trait
marker = '+',               # Marqueur
markeredgecolor = 'blue',   # Couleur du marqueur
markersize = 10             # Taille du marqueur
)
# Pour afficher le graphe courant :
plt.show()

Qui donne :

 

Ou :

from matplotlib import pyplot as plt
x = [1, 3, 2, 3]
y = [4, 8, 5, 4]
plt.title('Mon autre beau graphe')
# Limite des axes :
plt.xlim(0, 4)
plt.ylim(0, 10)
plt.plot(
x,
y,              
linestyle = 'none',       
marker = 'o',               
markerfacecolor = 'red',   
markersize = 10             
)
plt.show()

Qui donne :

Un dernier exemple :

from matplotlib import pyplot as plt
x = [x / 2.0 for x in range(10)]
y = [i ** 2 for i in x]
z = [ j ** 3 for j in x]
plt.title('Dernier exemple avec deux courbes')
graphe1, = plt.plot(
x,
z,
color = 'red',
linewidth = 1,
markerfacecolor = 'blue',
markersize = 5
)
# scatter pour un nuage de points
graphe2 = plt.scatter(
x,
y,
color = 'blue',
marker = 'D',
s = 30
)
# lable des axes
plt.xlabel('Coordonnées en X')
plt.ylabel('Coordonnées en Y')
#Affichage d'une légende
plt.legend([graphe1, graphe2], ['cube', 'parabole'])
# Un annotation avec une flêche
plt.annotate('Premier point', xy = (0, 0), xytext = (1, 10),
arrowprops = {'facecolor': 'red', 'shrink': 0.1})
plt.grid()
plt.show()

Qui donne :

Vous trouverez un bon nombre d’information que matplotlib, ici : http://www.python-simple.com/python-matplotlib/pyplot.php

Le TP

(Cette partie du TP est directement inspirée d’un TP proposé par un collègue : https://mathonomie.com/ )

Pour réaliser ce TP commencez par créer un dossier et appelez le TP_mignon. Téléchargez le fichier suivant :

et placez le dans le dossier précédemment crée.

Téléchargez le fichier suivant :

et placez le dans le même dossier. (changez l’extension .txt en .py)

 

 

Corrigé de l'exercice

Ne regardez pas trop vite le corrigé !

Le code :

import matplotlib.pyplot as plt 
tuning = [('noir', 'black'),
('jaune', 'yellow'),
('bleu', 'b'),
('truc','white')]
def lecture(nom_du_fichier) :
# initialisation : liste vide
liste = []
# ouverture du fichier en lecture -> 'r'
with open(nom_du_fichier, 'r') as fichier:
# on récupère le contenu
texte = fichier.read()
# on le separe en lignes
lignes = texte.split(sep = '\n')
# on parcourt les lignes
for phrase in lignes:
# on découpe la phrase en trois morceaux dans une liste
# attention dans ce csv le séparateur
# est un virgule , et pas un ;
liste_de_trois = phrase.split(sep = ",")
if len(liste_de_trois) == 3:
# un nouveau dico vide appelé new
new = {}
new['espece'] = liste_de_trois[2]
# attention : à convertir en entiers
# le premier élément de la liste
new['abscisse'] = int(liste_de_trois[0])
# le deuxième élément de la liste
new['ordonnee'] = int(liste_de_trois[1])
# on rajoute new à la liste
liste.append(new)
# on ferme le fichier ouvert
fichier.close()
# on renvoie la liste remplie
return liste
liste = lecture("dessin.csv")
for spec, couleur in tuning:
# données
x=[]
y=[]
for f in liste :
if f['espece'] == spec:
x.append(f['abscisse'])
y.append(f['ordonnee'])
plt.scatter(x, y, color = couleur, label = spec, marker = 's')
# graphique 
plt.legend()
plt.show()

Et cela donne :