Я пытаюсь оживить N частиц, которые взаимодействуют друг с другом под воздействием кулоновской силы.Я сделал функцию, которая рекурсивно создает каждую позицию x и y каждой частицы, а также потенциальную энергию, и добавляет их в список.Используя анимацию из matplotlib, я попытался анимировать x, y в одном субплоте и энергию в другом.Однако, когда я пытаюсь оживить оба, ему удается оживить только один подзаговор.Я довольно новичок в Python, но я изо всех сил пытаюсь найти какую-либо информацию об анимации нескольких строк в каждом подзаговоре.
Я пытался использовать только одну функцию animation () и init (), но это работало, только если яиспользовал одну частицу.Я не могу сделать это с несколькими частицами (насколько мне известно), поэтому я сделал две функции animation () и две функции init ().
fig, (ax1, ax2) = plt.subplots(1,2)
line1, = ax1.plot([], [], lw=2)
line2, = ax2.plot([], [], lw=2)
ax1.set_ylim(-1, 1)
ax1.set_xlim(-1, 1)
ax2.set_ylim(0,100)
ax2.set_xlim(0, 0.0001)
lines = [plt.plot([], [])[0] for _ in range(N)]
lines2 = [plt.plot([], [])[0] for _ in range(N)]
У меня есть функция, которая добавляет x, y и Epot в список, содержащий списки для всех частиц.
def init():
for line1 in lines:
line1.set_data([], [])
return lines
def init2():
for line2 in lines2:
line2.set_data([], [])
return lines2
def animate(i):
for J,line1 in enumerate(lines):
function(i,J,N)
line1.set_data(tijd[J], Epot[J])
return lines
def animate2(i):
for J,line2 in enumerate(lines2):
function(i,J,N)
line2.set_data(x[J], y[J])
return lines2
Наконец, в конце кода у меня есть:
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=1000, interval=20, repeat=False, blit=False)
anim2 = animation.FuncAnimation(fig, animate2, init_func=init2, frames=1000, interval=20, repeat=False, blit=False)
plt.show()
Но всякий раз, когда я выполняю это, он только оживляет anim2.Я знаю, что что-то упустил, но не могу найти правильного решения.