1. Matplotlib | SSP
HAMIDI
Ecole supérieure de technologie de Laâyoune
12 janvier 2023
HAMIDI (ESTL) 12 janvier 2023 1 / 21
2. La bibliothèque Matplotlib est utilisée pour créer des fichiers statiques,
animés, et des tracés ou des figures 2D interactifs en Python. Ça peut
être installé à l’aide de la commande pip suivante à partir du invite de
commande :
pip i n s t a l l m a t p l o t l i b
Pour tracer à l’aide de Matplotlib, nous devons importer son Module
Pyplot à l’aide de la commande suivante :
import m a t p l o t l i b . pyplot as p l t
Le module pyplot de matplotlib contient une collection de fonctions
utilisables pour travailler sur une repère. Les La fonction plot() du
module pyplot est utilisée pour créer une figure. Une figure est la
fenêtre globale où les sorties des fonctions pyplot sont tracées. Une
figure contient une zone de traçage, une légende, des étiquettes
d’axes, des graduations, un titre, etc. Chaque fonction apporte des
modifications à une figure.
HAMIDI (ESTL) 12 janvier 2023 2 / 21
3. Par exemple, crée une figure, crée une zone de traçage dans un figure,
trace quelques lignes dans une zone de traçage, décore le tracer avec
des étiquettes, etc.
Quand on veut représenter des données graphiquement, nous devrions
toujours donner un titre au graphique, étiqueter les axes du graphique
et fournir une légende au cas où nous en aurions plus d’un données
tracées.
Pour tracer x versus y, nous pouvons écrire plt.plot(x, y). La fonction
show() est utilisée pour afficher la figure créée par la fonction plot().
HAMIDI (ESTL) 12 janvier 2023 3 / 21
4. Considérons une enreprise multinationle d’IT, a enregistré le nombre
maximale d’incidents traité cinq jours. L’exemple suivant montre comment
tracer le nombre d’incidents pour les dates données. La sortie générée est
un line chart(graphique linéaire) :
i m p o r t m a t p l o t l i b . p y p l o t as p l t
j o u r s = [ ’ 09/01/2023 ’ , ’ 10/01/2023 ’ , ’ 11/01/2023 ’ , ’ 12/01/2023 ’ , ’ 13/01/2023 ’ ]
i n c i d e n t s = [ 1 0 , 25 , 28 , 15 , 50]
p l t . p l o t ( j o u r s , i n c i d e n t s )
p l t . show ( )
HAMIDI (ESTL) 12 janvier 2023 4 / 21
5. Il faut fournire à la fonction plot() deux parametre, les valeurs pour
l’axe des x et l’axe des y, respectivement. Comme montré dans
precedante, la fonction plot() trace par défaut un line chart. Nous
pouvons cliquer sur le bouton enregistrer sur la sortie fenêtre et
enregistrer notre figure en tant qu’image. Un figure peut aussi être
enregistré en utilisant la fonction savefig(). On peut donné le nom de
l’image comme parametre.
p l t . s a v e f i g ( ’ i n c i d e n t s . png ’ ) .
Nous avons utilisé la fonction plot() pour tracer un line chart. Le choix
de type de courbe depend toujours des données que l’on veut tracer.
Le line chart est le type de courbe par default, mais il existe plusieurs
type supporter par matplotlib :
HAMIDI (ESTL) 12 janvier 2023 5 / 21
7. BAR Chart
L’exemple suivant montre comment tracer un bar chart a partir d’un
dictionaire, il present des parametres que l’on peut ajouté la fonction
bar :
donnees = { ’C ’ :20 , ’C++’ :15 , ’ Java ’ :30 ,
’ Python ’ :35}
courses = l i s t ( donnees . keys ( ) )
v a l u e s = l i s t ( donnees . v a l u e s ( ) )
p l t . f i g u r e ( f i g s i z e = (10 , 5))
p l t . bar ( courses , values , c o l o r =’ purple ’ ,
width = 0.4)
p l t . x l a b e l ( " Cours " )
p l t . y l a b e l ( "Nombre␣d ’ tudiants " )
p l t . t i t l e ( "Nombre␣d ’ Etudiant ␣ par ␣Cour" )
p l t . show ()
HAMIDI (ESTL) 12 janvier 2023 7 / 21
9. SCATTER Chart
L’exemple suivant montre comment tracer un scatter chart, on
remarque que pour ce dernier on peut specifier aussi la taille et la
couleur(des bules), il prennent des valeurs numerique dans l’intervale
[vmin, vmax] :
j o u r s = [ ’ 09/01/2023 ’ , ’ 10/01/2023 ’ , ’ 11/01/2023 ’ ,
’ 12/01/2023 ’ , ’ 13/01/2023 ’ ]
i n c i d e n t s = [10 , 25 , 28 , 15 , 50]
# Generer des t a i l l e s et c o u l e u r s entre 15 et 100
t a i l l e s = np . random . uniform (15 , 100 , len ( j o u r s ))
c o u l e u r s = np . random . uniform (15 , 100 , len ( j o u r s ))
p l t . s c a t t e r ( jours , i n c i d e n t s , s=t a i l l e s ,
c=couleurs , vmin=0, vmax=100)
p l t . t i t l e ( " I n c i d e n t s ␣ par ␣ j o u r s " )
p l t . y l a b e l ( "Nombre␣d ’ i n c i d e n t s " )
p l t . x l a b e l ( " Jours " )
p l t . show ()
HAMIDI (ESTL) 12 janvier 2023 9 / 21
11. PIE Chart
Exemple :
t y p e s = [ ’ A p p l i c a t i o n ␣ p r i n c i p a l e ’ , ’ M a t e r i e l ’ , ’ E l e c t r i c i t e ’ ,
’ L o g i c i e l ’ , ’ I n t e r n e t ’ ]
n b _ i n c i d e n t s = [ 4 0 , 27 , 35 , 10 , 15]
# Decalage
d a c a l a g e = ( 0 . 2 5 , 0 . 0 , 0 . 1 5 , 0 . 1 , 0 . 0 )
c o u l e u r s = ( " red " , " g r e y " , " t e a l " ,
" cyan " , " c o r a l " )
# Fonction d ’ a f f i c h a g e du p o u r c e n t r a g e
d e f a f f i c h a g e _ p o u r c e n t a g e ( pct , v a l e u r s ) :
r e t u r n " { : . 1 f}%" . format ( pct )
f i g , ax = p l t . s u b p l o t s ( f i g s i z e =(10 , 7 ) )
wedges , t e x t s , a u t o t e x t s = ax . p i e ( nb_incidents ,
au to pct = lambda pourc entage :
a f f i c h a g e _ p o u r c e n t a g e (
pourcentage , n b _ i n c i d e n t s ) ,
e x p l o d e = dacalage ,
l a b e l s = types ,
shadow = True ,
c o l o r s = c o u l e u r s ,
s t a r t a n g l e = 90)
HAMIDI (ESTL) 12 janvier 2023 11 / 21
12. PIE Chart
Suite
# D e s c r i p t i o n
ax . l e g e n d ( wedges , types ,
t i t l e =" Types ␣d ’ i n c i d e n t s " ,
# l e s parametre s on t : x , y
bbox_to_anchor =(1 , 1 ) )
#a j o u t des p ourcentage de chaque s l i c e
p l t . s e t p ( a u t o t e x t s , s i z e = 8 , weight =" bold " )
ax . s e t _ t i t l e ( " D i s t r i b u t i o n ␣ des ␣ i n c i d e n t s ␣ par ␣ type " )
p l t . show ( )
On trace les types d’incidents par importance, le pie chart a plusieurs
parametres, comme le decalage(explosion), couleurs, affichage textuel
dans chaque slice, titre, etc.
HAMIDI (ESTL) 12 janvier 2023 12 / 21
14. HISTOGRAM Chart
Les histogrammes sont des graphiques à colonnes, où chaque colonne
représente un intervale([point depart, point stop] et la hauteur d’une
colonne correspond au nombre de valeurs comprises dans cette plage.
Pour faire un histogramme, les données sont triées en "bins" et le
nombre de points de données dans chaque "bin" est la hauteur de ce
"bin". On peut dire aussi que la hauteur de chaque colonne dans
l’histogramme est decrit par le nombre de points de données que son
"bin" contient.
donnes = np . random . normal (0 , 1 , 10000)
p l t . h i s t ( donnes , bins =50)
p l t . t i t l e ( " Histogram ␣ l o i ␣ normale " )
p l t . x l a b e l ( " Valeurs ␣ qui ␣ s u i t ␣N(0 , ␣ 1) " )
p l t . y l a b e l ( "Nombre␣de␣ v a l e u r s ␣ dans␣ l e ␣ bin " )
p l t . show ()
HAMIDI (ESTL) 12 janvier 2023 14 / 21
16. Style et annotation
df = pd . DataFrame ({
’ j o u r ’ : [
’ 01/01/2023 ’ , ’ 02/01/2023 ’ , ’ 03/01/2023 ’ , ’ 04/01/2023 ’ , ’ 05/01/2023 ’ , ’ 06/01
] ,
’ i n c i d e n t s ’ : [
10 , 50 , 70 , 100 , 150 ,170 , 200 , 250 , 283 , 500
]
})
df [ ’ j o u r ’ ] = pd . to_datetime ( df [ ’ j o u r ’ ] , format=’%d/%m/%Y ’ ) . dt . date
t i t r e _ s t y l e = {
’ c o l o r ’ : ’ red ’ ,
’ s i z e ’ : ’ xx−l a r g e ’ ,
’ weight ’ : ’ 800 ’
}
a x e s _ s t y l e = {
’ s i z e ’ : ’ x−l a r g e ’ ,
’ weight ’ : ’ 800 ’
}
f = p l t . f i g u r e ( f i g s i z e =(20 , 7 ) )
p l t . t i t l e ( "Nombre␣d ’ i n c i d e n t s ␣ par ␣ j o u r s " , f o n t d i c t=t i t r e _ s t y l e )
ax = f . add_subplot (111)
p l t . p l o t ( df [ ’ j o u r ’ ] , df [ ’ i n c i d e n t s ’ ] )
f o r elm1 , elm2 i n z i p ( df [ ’ j o u r ’ ] , df [ ’ i n c i d e n t s ’ ] ) :
ax . annotate ( s t r ( elm2 ) , xy=(elm1 , elm2 ) )
p l t . x l a b e l ( ’ J o u r s ’ , f o n t d i c t=a x e s _ s t y l e )
p l t . y l a b e l ( ’ I n c i d e n t s ’ , f o n t d i c t=a x e s _ s t y l e )
p l t . show ( )
HAMIDI (ESTL) 12 janvier 2023 16 / 21
17. Style et annotation
p l t . x l a b e l ( ’ J o u r s ’ , f o n t d i c t=a x e s _ s t y l e )
p l t . y l a b e l ( ’ I n c i d e n t s ’ , f o n t d i c t=a x e s _ s t y l e )
p l t . show ( )
Cet exemple montre comme ajouter des styles au texts present dans
notre courbe, comme le titre et les axes, des styles comme la couleur,
la taille(size) et l’epaisseur du text(weight), il montre aussi comment
on peut ajouter des annotations avec la fonction subplot, pour chaque
point (x, y) l’ajout des anotations est fait avec la fonction annotate,
aussi pour iterer sur les point on doit transformer les données en liste
de tuples(ex : [(x1, y1), (x2, y2), ....., (xn, yn)], on peut faire cette
transformation avec la foncton zip, en suite on itere sur ce nouveau
tableau de tuples, le premier tuple (x1, y1) represente un point sur le
repere ou on va ajouté l’annotation avec la fonction annotate, et ainsi
de suite jusqu’a la fin des points.
HAMIDI (ESTL) 12 janvier 2023 17 / 21
19. Style et annotation 2
ob = {
’ Personne ’ : [
’ a ’ , ’ b ’ , ’ c ’ , ’ d ’ , ’ e ’ , ’ f ’ , ’ g ’ , ’ h ’ , ’ i ’ , ’ j ’
] ,
’ Notes ’ : [
10 , 15 , 8 , 19 , 20 , 6 , 12 , 14 , 13 , 17
]
}
d = pd . DataFrame ( ob )
t o t a l = 0
f o r elm i n d [ ’ Notes ’ ] :
t o t a l += elm
f = p l t . f i g u r e ( f i g s i z e =(20 , 7 ) )
p l t . t i t l e ( " Notes " )
ax = f . add_subplot (111)
p l t . bar ( d [ ’ Personne ’ ] , d [ ’ Notes ’ ] , width =0.3 , c o l o r=" p u r p l e " )
f o r i i n range ( l e n ( d [ ’ Notes ’ ] ) ) :
ax . annotate ( s t r ( d [ ’ Notes ’ ] [ i ])+ ’ n ’+s t r ( round ( d [ ’ Notes ’ ] [ i ]∗100/ t o t a l , 2))+ ’%’ ,
xy=( i , d [ ’ Notes ’ ] [ i ] ) )
p l t . x l a b e l ( ’ J o u r s ’ )
p l t . y l a b e l ( ’ I n c i d e n t s ’ )
p l t . show ( )
HAMIDI (ESTL) 12 janvier 2023 19 / 21
20. Style et annotation 2
On a utilsé une autre manière pour affiché des annotations sur notre
graphique, au lieu d’iterer sur une liste de tuple comme l’exemple
precedant, on itere sur sur les données avec les indices, puisque nos
données x et y on la meme longeur, alors on itere sur le range de la longeur
d’un des deux(ex : si il on la longeur de 5, alors range(5)), et ensuite on
ajoute des annotations, on peut concatener des données dans notre
annotation puisque c’est un texte, dans ce exemple on a affiché la hauteur
et le pourcentrage de cet hauteur par rapport au totale.
HAMIDI (ESTL) 12 janvier 2023 20 / 21