Comment automatiser les mises à jour de tracé dans Matplotlib
Pour automatiser la mise à jour du tracé dans Matplotlib, nous mettons à jour les données, effaçons le tracé existant, puis traçons les données mises à jour en boucle. Pour effacer les tracés existants, nous utilisons plusieurs méthodes telles que canvas.draw()
avec canvas_flush_events()
, plt.draw()
et clear_output()
.
canvas.draw()
avec canvas_flush_events()
Nous devons configurer l’intrigue une fois. Ensuite, nous pourrions mettre à jour les données des objets de tracé avec set_xdata()
et set_ydata()
et enfin mettre à jour le tracé en utilisant canvas.draw()
.
import numpy as np
import time
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = np.cos(x)
plt.ion()
figure, ax = plt.subplots(figsize=(8, 6))
(line1,) = ax.plot(x, y)
plt.title("Dynamic Plot of sinx", fontsize=25)
plt.xlabel("X", fontsize=18)
plt.ylabel("sinX", fontsize=18)
for p in range(100):
updated_y = np.cos(x - 0.05 * p)
line1.set_xdata(x)
line1.set_ydata(updated_y)
figure.canvas.draw()
figure.canvas.flush_events()
time.sleep(0.1)
plt.ion()
active le mode interactif. Le tracé ne sera pas mis à jour si plt.ion()
n’est pas appelé.
canvas.draw()
est une méthode basée sur JavaScript pour afficher les chiffres et canvas.flush_events()
est également basée sur JavaScript pour effacer les chiffres.
plt.draw()
pour mettre à jour les tracés dans Matplotlib
Nous utilisons la fonction matplotlib.pyplot.draw()
pour mettre à jour les figures modifiées qui nous permettent de travailler en mode interactif. Pour mettre à jour les tracés, nous devons effacer les chiffres existants pour lesquels nous pouvons utiliser matplotlib.pyplot.clf()
et matplotlib.axes.Axes.clear()
.
Avec plt.clf()
import numpy as np
import time
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = np.cos(x)
plt.ion()
figure, ax = plt.subplots(figsize=(8, 6))
(line1,) = ax.plot(x, y)
plt.title("Dynamic Plot of sinx", fontsize=25)
plt.xlabel("X", fontsize=18)
plt.ylabel("sinX", fontsize=18)
for p in range(100):
updated_y = np.cos(x - 0.05 * p)
line1.set_xdata(x)
line1.set_ydata(updated_y)
figure.canvas.draw()
figure.canvas.flush_events()
time.sleep(0.1)
Production:
Avec fig.clear()
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.cos(x)
fig = plt.figure()
for p in range(50):
p = 3
updated_x = x + p
updated_y = np.cos(x)
plt.plot(updated_x, updated_y)
plt.draw()
x = updated_x
y = updated_y
plt.pause(0.2)
fig.clear()
Production:
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn