Como automatizar as atualizações das parcelas em Matplotlib

  1. canvas.draw() juntamente com canvas_flush_events()
  2. plt.draw() para atualizar gráficos 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