Изменение аргумента интервала в анимации. FuncAnimation в библиотеке matplotlib имеет неожиданные эффекты - PullRequest
0 голосов
/ 19 сентября 2018

У меня небольшие проблемы с работой функции FuncAnimation.Самая насущная проблема заключается в том, что изменение аргумента интервала от 1 до любого значения, меньшего единицы, никак не влияет на анимацию, а это означает, что существует ограничение на скорость, с которой я могу запустить анимацию.Например:

ani = animation.FuncAnimation(fig, animate, np.arange(1, len(y[0])),
                              interval=1, blit=True, init_func=init)

работает так же, как

ani = animation.FuncAnimation(fig, animate, np.arange(1, len(y[0])),
                              interval=0.01, blit=True, init_func=init)

Есть ли у кого-нибудь идеи для обхода этой функции?

Другая, возможно связанная проблема,что функция не действует так, как я ожидаю.Поскольку в документах говорится, что интервал дает «Задержку между кадрами в миллисекундах. По умолчанию 200.», почему удвоение интервала от 1 до 2 очень мало влияет на скорость, с которой он работает?Конечно, это должно заставить анимацию играть вдвое дольше?

Спасибо за любую помощь.

Редактировать: Чтобы воспроизвести это, вы можете использовать приведенный здесь пример кода: https://matplotlib.org/examples/animation/double_pendulum_animated.html

Установите dt = 0,02 и поиграйтесь с интервалом, чтобы увидеть проблему.

Единственная причина, о которой я могу подумать, это то, что функция не принимает значения меньше 1, хотя это не объясняет вторую проблему, которая у меня есть.

1 Ответ

0 голосов
/ 19 сентября 2018

interval - это интервал таймера, с которым создаются новые кадры.На самом деле создание кадра может занять больше времени.Это будет зависеть от размера фигуры, количества данных для анимации и т. Д. 1 миллисекунда уже довольно быстрая;по крайней мере, с обычными размерами фигур вы, вероятно, не достигнете этой скорости, и вместо этого она может составить, например, 1,7 мс.Тогда изменение на 2 мс не будет иметь существенных различий, а изменение на что-либо ниже 1 вообще не будет иметь никакого значения.

Также учтите, что вы не можете наблюдать такие высокие скорости 1000 кадров в секунду своими глазами.Предел, на который способен наблюдать человеческий мозг, - частота кадров ~ 25-30 кадров в секунду.Таким образом, вместо искусственного увеличения частоты кадров, вы можете просто придерживаться интервала в 30 мс и вместо этого изменять анимацию с помощью аргумента frames или внутри функции анимации.

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