Я пытаюсь понять, как анимировать несколько элементов на одной оси с помощью matplotlib. Я могу сделать это с помощью отдельных элементов (линии или изображения из matshow
), выполнив следующие действия: https://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/, но расширение до 2 элементов, похоже, не работает.
Я видел несколько других подобных вопросов о stackoverflow, но, похоже, у меня возникла другая проблема.
Вот код, который я пробовал:
fig = plt.figure()
ax = plt.axes(xlim=[-0.5, np.shape(first_cadence)[0]-0.5], ylim=[-0.5, np.shape(first_cadence)[1]+0.5])
im = ax.matshow(first_cadence, animated=True)
line_pos = ax.plot(x[0], y[0], '*')
def initiate():
im.set_array(f[0,'FLUX'])
line_pos.set_data([], [])
return (im, line_pos)
def update(i):
im.set_array(f[i,'FLUX'])
line_pos.set_data([x[i]], [y[i]])
return (im, line_pos)
ani = animation.FuncAnimation(fig, update, range(0, len(f)), init_func=initiate, interval=50, blit=True)
plt.show()
Я получаю длинное сообщение об ошибке, заканчивающееся словами:
AttributeError: 'list' object has no attribute 'set_data'
Могу выложить все, если нужно. Для получения дополнительной информации, x
и y
— это просто одномерные массивы, поэтому я рисую одну точку в каждом кадре, а не линию. То есть: x = [1.21, 1.20, 1.19, 1.23, ...]
Так что я не знаю, что происходит не так. Я предполагаю, что это что-то с тем, как я возвращаю элементы с функциями инициации и обновления. Я подумал, что, поскольку вы должны вернуть кортеж с версией с одним элементом (т.е. return line,
), то простой способ расширить это на несколько элементов будет с кортежем, содержащим все элементы. Но это было только предположение.