Cómo automatizar las actualizaciones de trama en Matplotlib

Suraj Joshi 15 febrero 2024
  1. canvas.draw() junto con canvas_flush_events()
  2. plt.draw() para actualizar las gráficos en Matplotlib
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)

automatizar las actualizaciones de la trama en Matplotlib usando canvas_draw

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:

Automatice las actualizaciones de trazado en Matplotlib utilizando los métodos de dibujo y clf

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:

Automatice las actualizaciones de trama en Matplotlib utilizando los métodos de dibujar y borrar

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn