动画绘制多行迭代的图

时间:2020-04-20 10:27:59

标签: matplotlib animation

我正在尝试在一个绘图上绘制多条线并为其设置动画。我可以一次显示一行,但是在下一帧上,上一行将被删除,新的一行会出现。如何更改下面的代码,以在添加下一行的同时保留所有先前的行?下面代码中的“ final”变量是该图应在动画结束时显示的内容。

import matplotlib.pyplot as plt
from matplotlib import animation
import numpy as np

frame_num = 500
N = 1  # number of lines

fig = plt.figure()
ax1 = plt.axes(xlim=(-1.5, 1.5), ylim=(-1.5, 1.5))
line = ax1.plot([], [], lw=1)
ax1.set_aspect("equal")
ax1.set_facecolor((0, 0, 0))
plt.xticks([])
plt.yticks([])
lines = [plt.plot([], [], 'w-')[0] for _ in range(N)]  # lines to animate

# init lines
def init():
    for line in lines:
        line.set_data([], [])
    return lines

r1 = 1
r2 = 0.75
t1 = np.linspace(0, 4*np.pi, frame_num+1)
t2 = np.linspace(0, 14*np.pi, frame_num+1)
const = 1
xlist = [r1*np.cos(t1), r2*np.cos(t2*const)]
ylist = [r1*np.sin(t1), r2*np.sin(t2*const)]
x1, x2, y1, y2 = [], [], [], []
data = (xlist, ylist)
# final = plt.plot(xlist, ylist, 'b-')

# animate lines
def animate(i):
    x1 = xlist[0][i]
    y1 = ylist[0][i]
    x2 = xlist[1][i]
    y2 = ylist[1][i]

    for j, line in enumerate(lines):
        line.set_data([x1, x2], [y1, y2])
    return lines


anim = animation.FuncAnimation(fig,
                               animate,
                               init_func=init,
                               frames=frame_num,
                               interval=10,
                               blit=True,
                               repeat=False)

plt.show()

0 个答案:

没有答案