Cómo automatizar las actualizaciones de trama en Matplotlib
Para automatizar la actualización de la trama en Matplotlib, actualizamos los datos, borramos la trama existente y luego trazamos los datos actualizados en un bucle. Para borrar las gráficos existentes, utilizamos varios métodos, como canvas.draw()
junto con canvas_flush_events()
, plt.draw()
y clear_output()
.
canvas.draw()
junto con canvas_flush_events()
Necesitamos configurar la trama una vez. Luego, podríamos actualizar los datos de los objetos de la trama con set_xdata()
y set_ydata()
y finalmente actualizar la trama usando 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()
activa el modo interactivo. El diagrama no se actualizará si no se llama a plt.ion()
.
canvas.draw()
es un método basado en JavaScript para mostrar figuras y canvas.flush_events()
también se basa en JavaScript para borrar figuras.
plt.draw()
para actualizar las gráficos en Matplotlib
Utilizamos la función matplotlib.pyplot.draw()
para actualizar las cifras alteradas que nos permiten trabajar en modo interactivo. Para actualizar las gráficos, necesitamos borrar las cifras existentes para las cuales podemos usar matplotlib.pyplot.clf()
y matplotlib.axes.Axes.clear()
.
Con 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)
Producción:
Con 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()
Producción:
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn