我正在尝试制作在库仑力的影响下互相影响的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进行动画处理。我知道我缺少了一些东西,但是找不到正确的解决方案。