Le mode interactif de Matplotlib est un mode de fonctionnement qui permet aux utilisateurs de visualiser et d'interagir avec les graphiques en temps réel. Lorsque le mode interactif est activé, chaque commande de traçage met à jour immédiatement le graphique affiché, sans nécessiter un appel explicite à des fonctions telles que show() ou draw(). Ceci est particulièrement utile lors de l'utilisation de Matplotlib dans des environnements de type shell interactif, tels que les notebooks Jupyter ou les interpréteurs Python interactifs, où les utilisateurs peuvent vouloir ajuster les graphiques de manière incrémentielle sans avoir à redessiner la figure entière à chaque fois.
Pour activer le mode interactif dans Matplotlib, vous pouvez utiliser la fonction « plt.ion() » (ion signifiant "interactive on"). Cette fonction rend Matplotlib interactif et permet la mise à jour des graphiques en temps réel. Notez aussi que votre premier appel à « plt.show() » doit être non bloquant : pour ce faire, il faut rajouter le paramètre « block=False ».
Pour revenir dans le mode initial, on peut utiliser la fonction « plt.ioff() » (ioff signifiant "interactive off").
Voici un exemple d'utilisation de ce mode interactif.
%matplotlib qt
from time import sleep
import matplotlib.pyplot as plt
import numpy as np
# On active le mode interactif
plt.ion() # ion => interactive on / ioff => interactive off
# Créer des données de test et la figure associée
x = np.linspace(0, 10, 100)
y1 = np.cos(x)
y2 = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y1, label="Cosinus")
ax.plot(x, y2, label="Sinus")
# Afficher la figure de manière non bloquante
plt.show(block=False)
plt.pause(2)
# Récupérer la liste des objets Line2D
lines = ax.get_lines()
# Trouver l'objet Line2D correspondant à la courbe 'Sinus'
for line in lines:
if line.get_label() == "Sinus":
# Changer la couleur de la ligne en rouge
line.set_color("Red")
plt.draw()
break
plt.legend()
plt.pause(2)
plt.ioff()
plt.show()
Bien entendu, pour tester ce mode particulier, nous devons activer un backend Qt.