使用动画对多幅图中的多条线进行动画处理

时间:2019-05-08 21:45:37

标签: matplotlib python-3.7

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

0 个答案:

没有答案