Плавная анимация с матплотлибом - PullRequest
1 голос
/ 29 апреля 2020

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

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

plt.style.use('seaborn-paper')

x_vals = []
y_vals = []
index = count()

def animate(i):
   x_vals = []
   y_vals = []
   x_vals*= 0
   y_vals*= 0
   var=next(index)
   x_vals.append(var*0.05 % 10)
   y_vals.append(var*0.05 % 10)
   plt.cla()
   plt.xlim(0,10)
   plt.ylim(0,10)
   plt.scatter(x_vals,y_vals)

ani = FuncAnimation(plt.gcf(), animate, interval=1)
plt.tight_layout()
plt.show()

Имейте в виду, что это супер схематичное решение для того, что я пытаюсь сделать. Мой вопрос: есть ли способ сгладить мою точечную анимацию, чтобы она не выглядела прерывисто?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Я нашел способ упростить ваш код, который мог бы помочь сделать его быстрее. Передача index в качестве функции для аргумента frames определенно увеличивает скорость.

index = count()

def animate(i):
   var = next(index)
   v = var*0.05 % 10
   plt.cla()
   plt.xlim(0,10)
   plt.ylim(0,10)
   plt.scatter(v,v)

ani = FuncAnimation(plt.gcf(), animate, frames = index, interval = 1)
plt.tight_layout()
plt.show()
0 голосов
/ 29 апреля 2020

Если вы посмотрите на этот пост , вы увидите (а) плавные анимации и (б) использование автором необязательных аргументов для FuncAnimation.

...