Анимация Matplotlib без добавления счетчика внутри функции анимации - PullRequest
0 голосов
/ 03 ноября 2019

Я не понимаю, почему счетчик внутри деактивированной функции не добавляется сам к себе.

Я пытался использовать анимацию для печати новых значений двух списков значений, каждый на каждой оси, каждыйсекунда.

РЕДАКТИРОВАНИЕ: Код:

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [1, 12, 10, 1, 5, 3, 5, 7, 4, 4]

x_vals = []
y_vals = []

cnt = 0
def animate(i, cnt):
    print(cnt)
    print('loop ' + str(cnt))

    x_vals.append(x[cnt])
    y_vals.append(y[cnt])

    print(x_vals, y_vals)
    cnt += 1  # this is not happening
    plt.plot(x_vals, y_vals, label='Price')

ani = FuncAnimation(plt.gcf(), animate, fargs=(cnt,), interval=1000)

# plt.tight_layout()
plt.show()

Я объявляю cnt вне функции animate и получаю этот вывод (спасибо PartialOrder user):

0
loop 0
[1] [1]
0
loop 0
[1, 1] [1, 1]
0
loop 0
[1, 1, 1] [1, 1, 1]
....

. Это показывает, что цикл в функции animate выполняется каждую секунду, но счетчик не добавляется, потому что каждый цикл сбрасывается в ноль. И если объявить cnt counter перед функцией (не переданной в аргументе), я получу:

File "test3.py", line 13, in animate
    print('loop ' + str(cnt))
UnboundLocalError: local variable 'cnt' referenced before assignment

В обоих случаях я получу пустой график:

введите описание изображения здесь

Почему счетчик не добавляется и как передать внешний счетчик в функцию?

Спасибо!

1 Ответ

0 голосов
/ 07 ноября 2019

ага !!!! ... глобально сработало !!! Спасибо!!! @ ImportanceOfBeingErnest

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [1, 12, 10, 1, 5, 3, 5, 7, 4, 4]

x_vals = []
y_vals = []

cnt = 0
def animate(i):
    global cnt
    if cnt == 10:
        exit('Finished')
    print('loop ' + str(cnt))

    x_vals.append(x[cnt])
    y_vals.append(y[cnt])

    print(x_vals, y_vals)
    cnt += 1  # this is not happening
    plt.plot(x_vals, y_vals, label='Price')

ani = FuncAnimation(plt.gcf(), animate, interval=1000)

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