Функция FuncAnimation модуля анимации matplotlib требует фигуры и функции для рисования каждого кадра, поэтому сначала инициализируйте фигуру следующим образом:
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
ax1.set_aspect("equal")
ax1.set_xlim(-30, 30)
ax1.set_ylim(-30, 30)
l1, = ax1.plot([], [], linestyle = "-.", color = "blue")
l2, = ax1.plot([], [], '-.', color = "black")
s1, = ax1.plot([], [], linestyle = None, marker = "o", markersize = 5, color = "blue")
s2, = ax1.plot([], [], linestyle = None, marker = "o", markersize = 5, color = "red")
Обратите внимание, что различные линейные графики не содержат входных данных и сохраняются в переменных l1, l2, s1 и s2.
Теперь определите функцию, которая будет вызываться для рисования каждого кадра. Первым аргументом всегда является номер кадра. Эта функция должна возвращать все объекты графика, которые были обновлены с использованием их методов set_data:
def update_fig(i, x1coor, y1coor, x2coor, y2coor):
l1.set_data(x1coor[:i+1], y1coor[:i+1])
l2.set_data(x2coor[:i+1], y2coor[:i+1])
s1.set_data(x1coor[i], y1coor[i])
s2.set_data(x2coor[i], y2coor[i])
return l1, l2, s1, s2,
Теперь вы можете запустить анимацию (обратите внимание, что аргументы update_fig, кроме «i», передаются в функцию с помощью ключевого слова «fargs»):
ani = animation.FuncAnimation(fig, update_fig,
frames = len(x1coor),
fargs = (x1coor, y1coor, x2coor, y2coor),
interval = 100,
repeat = True,
)