Como automatizar as atualizações das parcelas em Matplotlib

Suraj Joshi 15 fevereiro 2024
  1. canvas.draw() juntamente com canvas_flush_events()
  2. plt.draw() para atualizar gráficos em Matplotlib
Como automatizar as atualizações das parcelas em Matplotlib

Para automatizar a atualização do plot em Matplotlib, atualizamos os dados, limpamos o plot existente, e então plotamos os dados atualizados em um loop. Para limpar as parcelas existentes, utilizamos vários métodos como canvas.draw() juntamente com canvas_flush_events(), plt.draw() e clear_output().

canvas.draw() juntamente com canvas_flush_events()

Precisamos configurar a trama uma vez. Em seguida, poderíamos atualizar os dados dos objetos da trama com set_xdata() e set_ydata() e finalmente atualizar a trama utilizando 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 as atualizações do gráfico em Matplotlib utilizando o canvas_draw

plt.ion() liga o modo interativo. A trama não será atualizada se o plt.ion() não for chamado.

canvas.draw() é um método baseado em JavaScript para exibir figuras e o canvas.flush_events() também é baseado em JavaScript para limpar figuras.

plt.draw() para atualizar gráficos em Matplotlib

Utilizamos a função matplotlib.pyplot.draw() para atualizar números alterados que nos permitem trabalhar em modo interativo. Para atualizar os gráficos, precisamos limpar as figuras existentes para as quais podemos utilizar matplotlib.pyplot.clf() e matplotlib.axes.Axes.clear().

Com 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)

Resultado:

automatizar as atualizações de parcelas em Matplotlib usando os métodos de desenho e clf

Com 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()

Resultado:

automatizar atualizações de parcelas em Matplotlib usando métodos de desenho e de limpeza

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn