Les graphiques (deuxième partie)

Code sous licence creative commun CC BY-NC-SA BY Gaëlle Rebolini

Télécharger le pdf

Télécharger le notebook

Lancer le notebook sur binder (lent)

Dans cette deuxième partie, nous allons voir comment créer des graphiques multiples et des vecteurs.

Pour plus d’informations, se référer au site : https://matplotlib.org/tutorials/index.html

Afficher plusieurs graphiques simultanément

Pour cela, on utilise la méthode plt.subplot(nombre de lignes, nombre de colonnes, index) de la bibliothèque matplotlib.pyplot as plt.

Cette méthode permet de créer un emplacement en divisant la fenêtre graphique en un nombre donné de lignes et de colonnes indiqué entre parenthèses. L’index permet de renseigner la position de l’emplacement dans la fenêtre graphique. Il commence à 1 dans le coin supérieur gauche de la fenêtre graphique et augmente vers la droite puis vers le bas.

Exemple: pour une fenêtre graphique divisée en 2 lignes et 2 colonnes, les emplacements sont indexées comme suit :

1 2

3 4

Après avoir défini l’emplacement, il suffit de coder directement les caractéristiques du graphique qui apparaîtra dans l’emplacement en question.

Pour ajuster les positions des côtés des graphiques et les espacements entre ceux-ci, on utilise la méthode :

plt.gcf().subplots_adjust(left = 0.125, bottom = 0.1, right = 0.9, top = 0.9, wspace = 0.2, hspace = 0.2) de la bibliothèque matplotlib.pyplot as plt.

Les paramètres utilisés sont les suivants (les valeurs données ci-dessous sont les valeurs par défaut) :

  • left = 0.125 : position du côté gauche du graphique

  • right = 0.9 : position du côté droit du graphique

  • bottom = 0.1 : position du côté bas du graphique

  • top = 0.9 : position côté haut du graphique

  • wspace = 0.2 : espacement horizontal entre deux graphiques

  • hspace = 0.2 : espacement vertical entre deux graphiques

Toutefois, si la taille de la fenêtre graphique n’est pas cohérente avec les valeurs des paramètres, l’affichage sera modifié.

Prenons l’exemple de la chute libre d’une balle sans vitesse initiale afin d’illustrer ces différentes méthodes. Voici trois programmes permettant d’afficher les coordonnées verticales de la position, de la vitesse et de l’accélération d’une balle en fonction du temps sur trois graphiques simultanément. Selon le programme, les graphiques sont positionnés différemment.

Premier programme

[1]:
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np

t=np.arange(0,0.65,0.05)
z=-4.9*t**2+2
vz=-9.8*t
az=-9.8+0*t

# création de la fenêtre graphique 1

plt.figure(1,figsize=(10,12))
plt.gcf().subplots_adjust(left = 0.125, bottom = 0.2, right = 1.5,
                          top = 0.9, wspace = 0.5, hspace = 0)

# division de la fenêtre graphique en 1 ligne, 3 colonnes,
# graphique en position 1
# puis caractéristiques de ce graphique

plt.subplot(1,3,1)
plt.plot(t,z,color='b', marker = '+')
plt.title('position')
plt.grid()
plt.xlabel('t(s)')
plt.ylabel('z(m)')
plt.ylim(0)


# division de la fenêtre graphique en 1 ligne, 3 colonnes,
# graphique en position 2
# puis caractéristiques de ce graphique

plt.subplot(1,3,2)
plt.plot(t,vz,color='b', marker = '+')
plt.title ('vitesse')
plt.grid()
plt.xlabel('t(s)')
plt.ylabel('vz(m/s)')


# division de la fenêtre graphique en 1 ligne, 3 colonnes,
# graphique en position 3
# puis caractéristiques de ce graphique

plt.subplot(1,3,3)
plt.plot(t,az,color='b', marker = '+')
plt.title('accélération')
plt.grid()
plt.xlabel('t(s)')
plt.ylabel('az(m/s²)')

plt.show()
../_images/05-bases_10-graphiques_partie_2_7_0.png

Deuxième programme

[2]:
# création de la fenêtre graphique 2

plt.figure(2,figsize=(10,12))
plt.gcf().subplots_adjust(left = 0.2, bottom = 0.2, right = 1.5,
                          top = 0.9, wspace = 0, hspace = 0.5)

# division de la fenêtre graphique en 3 lignes, 1 colonne,
# graphique en position 1
# puis caractéristiques de ce graphique

plt.subplot(3,1,1)
plt.plot(t,z,color='b', marker = '+')
plt.title('position')
plt.grid()
plt.xlabel('t(s)')
plt.ylabel('z(m)')
plt.ylim(0)


# division de la fenêtre graphique en 3 lignes, 1 colonne,
# graphique en position 2
# puis caractéristiques de ce graphique

plt.subplot(3,1,2)
plt.plot(t,vz,color='b', marker = '+')
plt.title ('vitesse')
plt.grid()
plt.xlabel('t(s)')
plt.ylabel('vz(m/s)')


# division de la fenêtre graphique en 3 lignes, 1 colonne,
# graphique en position 3
# puis caractéristiques de ce graphique

plt.subplot(3,1,3)
plt.plot(t,az,color='b', marker = '+')
plt.title('accélération')
plt.grid()
plt.xlabel('t(s)')
plt.ylabel('az(m/s²)')

plt.show()
../_images/05-bases_10-graphiques_partie_2_9_0.png

Troisième programme

[3]:
# création de la fenêtre graphique 3

plt.figure(3,figsize=(10,12))
plt.gcf().subplots_adjust(left = 0.2, bottom = 0.2, right = 1.5,
                          top = 0.8, wspace = 0.5, hspace = 0.5)

# division de la fenêtre graphique en 1 ligne, 2 colonnes,
# graphique en position 1
# puis caractéristiques de ce graphique

plt.subplot(1,2,1)
plt.plot(t,z,color='b', marker = '+')
plt.title('position')
plt.grid()
plt.xlabel('t(s)')
plt.ylabel('z(m)')
plt.ylim(0)


# division de la fenêtre graphique en 2 lignes, 2 colonnes,
# graphique en position 2
# puis caractéristiques de ce graphique

plt.subplot(2,2,2)
plt.plot(t,vz,color='b', marker = '+')
plt.title ('vitesse')
plt.grid()
plt.xlabel('t(s)')
plt.ylabel('vz(m/s)')


# division de la fenêtre graphique en 2 lignes, 2 colonnes,
# graphique en position 4
# puis caractéristiques de ce graphique

plt.subplot(2,2,4)
plt.plot(t,az,color='b', marker = '+')
plt.title('accélération')
plt.grid()
plt.xlabel('t(s)')
plt.ylabel('az(m/s²)')

plt.show()
../_images/05-bases_10-graphiques_partie_2_11_0.png

Afficher des vecteurs sur un graphique

Pour cela, on utilise la méthode de la bibliothèque matplotlib.pyplot as plt

plt.arrow(x, y, composante_selon_x, composante_selon_y, facecolor=”r”, edgecolor=”r”, width=0.008, head_width=0.02, length_includes_head=True)

Les paramètres utilisés sont :

  • x, y : coordonnées de l’origine du vecteur dans la base utilisée dans le graphique.

  • composante_selon_x, composante_selon_y : composantes (coordonnées) du vecteur

  • facecolor (fc) : couleur de remplissage du vecteur

  • edgecolor (ec) : couleur du contour du vecteur

  • width : largeur du corps du vecteur (valeur par défaut: 0.001)

  • head_width : largeur de la tête du vecteur (par défaut: 3 * width)

  • head_length : longueur de la tête du vecteur (par défaut: 1.5 * head_width)

  • length_includes_head : True si la tête doit être comptée dans le calcul de la longueur du vecteur (par défaut: False)

Prenons l’exemple d’un tir parabolique d’une balle et voyons comment tracer les vecteurs vitesse pour chaque position de la balle.

[4]:
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np

t=np.arange(0,1.05,0.05)

z=-4.9*t**2+5*t
vz=-9.8*t+5
x=3*t
vx=3+0*t


plt.figure(4,figsize=(17,7))

plt.plot(x,z,color='b', marker = '+')
plt.title('Tracé des vecteurs vitesse')
plt.grid()
plt.xlabel('x(m)')
plt.ylabel('z(m)')

for i in range (len (z)) :
    plt.arrow(x[i],z[i],0.02*vx[i],0.02*vz[i],facecolor='r',
              edgecolor='r',width=0.008,head_width=0.02,
              length_includes_head=True)

# ici les coordonnées vx et vy sont multipliées par 0.02 afin
# d'adapter l'échelle de longueur du vecteur.

plt.show()
../_images/05-bases_10-graphiques_partie_2_15_0.png