Обновление переменной анимации - PullRequest
1 голос
/ 05 марта 2020

Я пытаюсь написать программу для симуляции орбиты двух тел. Мне удалось создать анимацию орбит двух тел, и я пытаюсь добавить счетчик в верхнем углу анимации, чтобы отобразить кинетическую c энергию системы.

У меня есть энергии кинетики c, хранящиеся в списке с именем "ke", и я хочу, чтобы анимация отображала значения в списке, соответствующие положениям тел.

Однако, когда я пытаюсь написать код, необходимый для отображения энергий кинет c, мне нужно вернуть переменную "energy_text" , но я получаю ошибку: AttributeError : у объекта 'list' нет атрибута 'set_animated' .

Как я могу получить переменную, которая будет возвращена / обновлена ​​правильно?

fig = plt.figure()
ax = plt.axes()
ax = plt.axes(xlim=(-12*10**6, 12*10**6), ylim=(-12*10**6, 12*10**6))
patches = []
patches.append(plt.Circle((r_phobos_h[0][0],r_phobos_h[0][1]),5*10**5,color="b", animated=True))
patches.append(plt.Circle((r_mars_h[0][0],r_mars_h[0][1]),5*10**6,color="orange", animated=True))

energy_text = ax.text(0.02, 0.90, '', transform=ax.transAxes)
def init():
    for i in range(0, len(patches)):
            ax.add_patch(patches[i])
    energy_text.set_text('')
    return patches, energy_text

def animate(i):
    patches[0].center = (r_phobos_h[i][0], r_phobos_h[i][1])
    patches[1].center = (r_mars_h[i][0], r_mars_h[i][1])
    energy_text.set_text(ke[i])
    return patches, energy_text

numframes = len(t)
anim = FuncAnimation(fig, animate, init_func=init, frames = numframes, interval=0.01,blit=True)

plt.show()

1 Ответ

1 голос
/ 05 марта 2020

Написав return patches, energy_text, вы не возвращаете плоский список обратно в animation. Изменяя строки на return patches + [energy_text], он должен работать:

return patches, energy_text    # -> [[patch_a, patch_b, ...patch_n], text1]
return patches + [energy_text] # -> [patch_a, patch_b, ...patch_n, text1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...