Les courbes¶
Pour tracer une courbe simple, il faut deux listes, tableaux de même dimension. Elles correspondent aux données des axes x et y.
Exemple minimal¶
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y) # Ajout du d'une courbe
plt.show() # Affichage d'une courbe
Ajout d'un titre au graphique¶
Pour ajouter un titre au graphique, on utilise la fonction plt.title("...")
.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y) # Ajout du d'une courbe
plt.title("Ma première figure") # Titre du graphique
plt.show() # Affichage d'une courbe
Ajout des titres des axes¶
Pour ajouter un titre sur les axes, on utilise les fonctions plt.xlabel("...")
et plt.ylabel("...")
.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y) # Ajout du d'une courbe
plt.title("Ma première figure") # Titre du graphique
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.show() # Affichage d'une courbe
Affichage de la grille¶
Pour afficher la grille, on utilise la fonction plt.grid(True)
.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y) # Ajout du d'une courbe
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.show() # Affichage d'une courbe
Ajout d'une deuxième courbe et d'une légende¶
Pour que la légende puisse s'afficher, il faut donner un label à chaque courbe avec le paramètre label="..."
dans la fonction plt.plot(...)
.
Par défaut, la légende se place automatique au mieux sur le graphique.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y, label="Sinus") # Ajout du d'une courbe avec label
plt.plot(x, y2, label='Cosinus') # Ajout d'une deuxième courbe avec label
plt.legend() # Affichage de la légende
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.show() # Affichage d'une courbe
On peut modifier l'emplacement de la légende avec le paramètre loc=x
, x
étant la position voulue.
Les différentes positions sont données dans le tableau ci-dessous.
Position | Code |
---|---|
'best' | 0 |
'upper right' | 1 |
'upper left' | 2 |
'lower left' | 3 |
'lower right' | 4 |
'right' | 5 |
'center left' | 6 |
'center right' | 7 |
'lower center' | 8 |
'upper center' | 9 |
'center' | 10 |
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y, label="Sinus") # Ajout du d'une courbe avec label
plt.plot(x, y2, label='Cosinus') # Ajout d'une deuxième courbe avec label
plt.legend(loc=9) # Affichage de la légende
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.show() # Affichage d'une courbe
Sauvegarder le graphique¶
Il est possible de sauvegarder le graphique sous différents formats (pdf, png, jpeg ...) avec la commande plt.savefig('Nom.pdf')
. L'extension du fichier détermine automatique son format.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y, label="Sinus") # Ajout du d'une courbe avec label
plt.plot(x, y2, label='Cosinus') # Ajout d'une deuxième courbe avec label
plt.legend(loc=9) # Affichage de la légende
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.savefig("Graphique.png", dpi=300) # Sauvegarde en png avec un dpi de 300
plt.show() # Affichage d'une courbe
Échelle semi-logarithmique et logarithmique¶
On peut tracer une courbe avec une échelle semi-logarithmique en utilisant la fonction plt.semilogx(x,y)
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0.1, 1000, 100)
y = np.log(x)
plt.semilogx(x, y) # Ajout du d'une courbe
plt.ylabel('log(x)') # Titre de l'axe y
plt.xlabel("x") # Titre de l'axe x
plt.grid(True) # Affichage de la grille
plt.show() # Affichage d'une courbe
Cela marche aussi pour l'axe des ordonnées avec la fonction plt.semilogy(x,y)
.
Pour une échelle log-log on utilise la fonction plt.loglog(x,y)
.
Affichage des points seuls¶
On peut afficher uniquement les points sans les relier ensemble en rajoutant le paramètre 'o'
dans la fonction plt.plot(...)
.
La liste des marqueurs possibles est disponible à l'adresse suivante : Marqueurs
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 50)
y = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y, '+', label="Sinus") # Ajout du des points uniquement
plt.plot(x, y2, label='Cosinus') # Ajout d'une deuxième courbe avec label
plt.legend(loc=9) # Affichage de la légende
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.show() # Affichage d'une courbe
Axe secondaire¶
Si les données à afficher sont de dimensions différentes ou d'unités différentes, il est possible de construire un axe secondaire pour différencier ces données.
Création de deux axes y.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 50)
y = 300*np.sin(x)
y2 = np.cos(x)
# Affichage des données de l'axe principal
fig, ax1 = plt.subplots()
color = 'tab:red'
ax1.set_xlabel('Angle (rad)')
ax1.set_ylabel('Amplitude', color=color)
ax1.plot(x, y, color=color)
ax1.tick_params(axis='y', labelcolor=color)
ax1.grid(True)
# Affichage de l'axe secondaire
ax2 = ax1.twinx() # Création d'un deuxième axe qui partage le même axe x
color = 'tab:blue'
ax2.set_ylabel('Amplitude')#, color=color) # Labelde l'axe x
ax2.plot(x, y2, color=color)
#ax2.tick_params(axis='y', labelcolor=color)
ax2.grid(True)
plt.title("Deux axes y")
fig.tight_layout() # Amélioration de l'affichage
plt.show()
Barres verticales et horizontales¶
Il est parfois nécessaire d'afficher une barre verticale ou horizontale. Pour cela on utilise les fonctions plt.axvline(x=0, ymin=0, ymax=1)
et plt.axhline(y=0, xmin=0, xmax=1)
.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 50)
y = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y, '+', label="Sinus") # Ajout du des points uniquement
plt.plot(x, y2, label='Cosinus') # Ajout d'une deuxième courbe avec label
plt.legend() # Affichage de la légende
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.axvline(x=np.pi, ymin=0, ymax=1, color="red") # Barre verticale
plt.axhline(y=-0.5, xmin=0, xmax=1, color="green") # Barre horizontale
plt.show() # Affichage d'une courbe
Sous figure ou afficher plusieurs graphiques sur la même figure¶
Il est possible d'afficher plusieurs graphiques côte à côte ou superposés sur la même figure grâce à la fonction plt.subplot(lcp)
.
Avec comme paramètre 3 chiffres compris entre 1 et 9 pour définir une matrice de graphique avec l
le nombre de lignes, c
le nombre de colonnes et p
l'emplacement où placer le graphique.
Pour éviter les chevauchements des graphiques, on utilise en plus la fonction plt.tight_layout()
.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 50)
y = np.sin(x)
y2 = np.cos(x)
plt.subplot(121) # Graphique côte à côte
plt.plot(x, y, '+', label="Sinus") # Ajout du des points uniquement
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.subplot(122) # Graphique superposé
plt.plot(x, y2, label='Cosinus') # Ajout d'une deuxième courbe avec label
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma deuxième figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.tight_layout() # Adaptation de l'affichage
plt.show() # Affichage d'une courbe
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 50)
y = np.sin(x)
y2 = np.cos(x)
y3 = np.cos(2*x)
plt.subplot(221) # Graphique matrice 2x2
plt.plot(x, y, '+', label="Sinus") # Ajout du des points uniquement
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.subplot(222) # Graphique matrice 2x2
plt.plot(x, y2, label='Cosinus') # Ajout d'une deuxième courbe avec label
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma deuxième figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.subplot(223) # Graphique matrice 2x2
plt.plot(x, y3, label='Cosinus') # Ajout d'une troisème courbe avec label
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma troisième figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.tight_layout() # Adaptation de l'affichage
plt.show() # Affichage d'une courbe
Personnalisation des courbes et autres options¶
Options d'affichage des lignes¶
Il est possible de modifier l'affichage des courbes en jouant sur les paramètres suivants (à inclure dans plt.plot(...)
:
lw=1
: épaisseur de ligne (par défaut : 1) ;ls='-'
: style de ligne -> ':', '-.', '--' (par défaut : '-' ligne continue) ;marker='.'
: type de marqueur pour les points -> '.', 'o', 'x', '+' ... (par défaut aucun), une liste des marqueurs possibles est disponible à l'adresse suivante : Marqueurs
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
y2 = np.cos(x)
y3 = np.cos(2*x)
plt.plot(x, y, ls='--', label="Pointillé") # Ajout du d'une en pointillé
# Ajout d'une courbe avec un 'x' comme marqueur
plt.plot(x, y2, marker='x', label='Marqueur')
plt.plot(x, y3, lw='2', label='Epaisseur') # Ajout d'une courbe d'épaisseur 2
plt.legend() # Affichage de la légende
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.savefig("Graphique.png", dpi=300) # Sauvegarde en png avec un dpi de 300
plt.show() # Affichage d'une courbe
Couleur des lignes¶
On peut changer la couleur des lignes à l'aide du paramètre color='red'
.
Liste de couleurs disponibles :
Alias | Couleur |
---|---|
'b' | blue |
'g' | green |
'r' | red |
'c' | cyan |
'm' | magenta |
'y' | yellow |
'k' | black |
'w' | white |
Il est aussi possible de donner le code hexadécimal de la couleur color='#18DDFA'
.
Pour trouver le code hexadécimal d'une couleur vous pouvez utiliser le site suivant : Couleurs hexa
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 50)
y = np.sin(x)
y2 = np.cos(x)
# Définition de la couleur par le nm
plt.plot(x, y, label="Sinus", color='red')
# Définition de la couleur par le code hexa
plt.plot(x, y2, label='Cosinus', color='#18DDFA')
plt.legend(loc=9) # Affichage de la légende
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.show() # Affichage d'une courbe
Bornes de l'affichage¶
Il est possible de réduire les bornes des axes abscisses et des ordonnées avec les fonctions plt.xlim(min,max)
et plt.ylim(min,max)
.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y) # Ajout du d'une courbe
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.ylim(0, 1) # On limites l'axe des ordonnées
plt.xlim(0, np.pi) # on limite l'axe des abscisses
plt.show() # Affichage d'une courbe
Personnalisation des étiquettes des axes¶
On peut personnaliser les étiquettes des axes en donnant une liste avec les fonctions plt.xticks(...)
et plt.ytixks(...)
.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y) # Ajout du d'une courbe
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Nom") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
# Changement des étiquettes de l'abscisse par des prénoms
plt.xticks(np.arange(2*np.pi), ('Tom', 'Dick',
'Harry', 'Sally', 'Sue', 'Pietro', 'Sandy'))
plt.show() # Affichage d'une courbe
Affichage des étiquettes en écriture scientifique¶
Pour de grands nombres, il est parfois nécessaire de changer le mode d'affichage des étiquettes et de le passer en écriture scientifique. Pour cela, on utilise la fonction plt.ticklabel_format(axis='both', style='sci', scilimits=(0,0))
, avec les paramètres suivant :
axis='x'
: l'axe sur lequel appliquer le changement d'affichage -> 'x', 'y' ou 'both' ;style='sci
: pour appliquer l'écriture scientifique ;scilimiter=(m,n)
: limitation de l'écriture scientifique à l'extérieur de l'intervalle de 10^m à 10^n, on peut mettre(0,0)
pour l'appliquer à toutes les valeurs.
import matplotlib.pyplot as plt
import numpy as np
# Création des données à afficher
x = np.arange(start=0, stop=10000, step=100)
y = np.random.rand(len(x))
y = x*y
# Affichage
plt.plot(x, y, 'ro', markersize=10)
plt.grid(True)
plt.title("Affichage classique")
plt.show()
import matplotlib.pyplot as plt
import numpy as np
# Création des données à afficher
x = np.arange(start=0, stop=10000, step=100)
y = np.random.rand(len(x))
y = x*y
# Affichage
plt.plot(x, y, 'ro', markersize=10)
plt.grid(True)
plt.title("Affichage scientifique")
plt.ticklabel_format(axis='both', style='sci', scilimits=(0, 0))
plt.show()
Zoom sur une partie du graphique¶
Il est possible d'inclure dans un graphique un effet de zoom sur une partie du graphique pour mettre en évidence un élément.
L'emplacement du zoom est défini par un numéro, voir le tableau ci-dessous :
Position | Code |
---|---|
'upper right' | 1 |
'upper left' | 2 |
'lower left' | 3 |
'lower right' | 4 |
'right' | 5 |
'center left' | 6 |
'center right' | 7 |
'lower center' | 8 |
'upper center' | 9 |
'center' | 10 |
from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes, mark_inset
import matplotlib.pyplot as plt
import numpy as np
# Création des données à afficher
x = np.arange(start=0, stop=10000, step=100)
y = np.random.rand(len(x))
y = x*y
# Création des éléments d'axe et figure
fig, ax = plt.subplots()
# Affichage du graphique de base
plt.plot(x, y, 'ro', markersize=5)
plt.grid(True)
plt.title("Effet de zoom")
# Zoom
# Facteur de zoom: 3, location: en haut à gauche
axins = zoomed_inset_axes(ax, 3, loc=2)
axins.scatter(x, y, label='Zoom', color='green') # On dessine le graphique zoomé
axins.set_xlim(0, 2000) # Limite de l'axe x
axins.grid(True)
axins.set_ylim(0, 1000) # Limite de l'axe y
plt.xticks(visible=False) # On cache les ticks sur x
plt.yticks(visible=False) # On cache les ticks sur y
# Effet de cadre sur le zoom
mark_inset(ax, axins, loc1=3, loc2=4, fc="None", ec="0.1")
plt.show()
Annotations sur le graphique¶
Il est possible d'ajouter des annotations sur le graphique avec la fonction plt.annotate(s,(x,y))
.
import matplotlib.pyplot as plt # Module pour tracer les graphiques
import numpy as np
# Tableau pour le tracé
x = np.linspace(0, 2*np.pi, 50)
y = np.sin(x)
plt.plot(x, y, '+', label="Sinus") # Ajout du des points uniquement
plt.ylabel('Amplitude') # Titre de l'axe y
plt.xlabel("Angle (rad)") # Titre de l'axe x
plt.title("Ma première figure") # Titre du graphique
plt.grid(True) # Affichage de la grille
plt.axvline(x=np.pi, ymin=0, ymax=1, color="red") # Barre verticale
plt.axhline(y=-0.5, xmin=0, xmax=1, color="green") # Barre horizontale
plt.scatter(0.5,-0.5) # Ajout d'un point
plt.annotate("Barre horizontale",(0,-0.4)) # Ajout d'une annotation
plt.show() # Affichage d'une courbe