Python в VSCode: данные на графике не обновляются - PullRequest
1 голос
/ 11 апреля 2020

Я хочу отобразить данные в l oop, чтобы вызвать «живое обновление» новых данных. Но я получаю только одно обновление моего графика, и никакие другие данные не добавляются в график. Что я делаю не так?

import numpy as np
import matplotlib.pyplot as plt
import time

fig=plt.figure()
ax1=fig.add_subplot(1,1,1)

x=[]
y=[]

for n in range(20):
    x.append(n)
    y.append(n*2)
    ax1.clear()
    ax1.scatter(x,y)
    #fig.canvas.draw()
    plt.autoscale(enable=True, axis='both')
    plt.show()

    time.sleep(0.1)

1 Ответ

1 голос
/ 12 апреля 2020

Вы должны использовать FuncAnimation . Это будет реализация для вашего примера -

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import time

fig=plt.figure()
ax1=fig.add_subplot(1,1,1)

x=list(range(20))
y=[n*2 for n in x]

def animate(i):
    ax1.clear()
    ax1.scatter(x[:i],y[:i])
    plt.autoscale(enable=True, axis='both')

ani = FuncAnimation(fig, animate, interval=100)
plt.show()

Обновление

Для работы с данными, которые не могут быть предварительно вычислены в массиве, как показано выше, вы можете использовать аргумент frames FuncAnimation как показано ниже -

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import time

fig=plt.figure()
ax1=fig.add_subplot(1,1,1)

x=[]
y=[]

def frames():
    for i in range(20):
        yield i, i*2

def animate(args):
    ax1.clear()
    x.append(args[0])
    y.append(args[1])
    ax1.scatter(x, y)
    plt.autoscale(enable=True, axis='both')

ani = FuncAnimation(fig, animate, frames=frames, interval=100)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...