我正在尝试使用matplotlib的动画功能来动画多个对象。默认情况下,动画功能会在每次调用动画函数时删除对象的旧实例,并更改行或补丁的位置或其他内容。 (当然,这是动画的全部要点)。但我有2个不同的动画对象:一条扫描方位角极坐标图的线和散点图标。我不希望标记消失。我希望它们一旦被绘制就在整个动画中保持不变。
我尝试了几个不同的东西,比如将'marker'散点添加到列表中并返回它,但是我在返回animate函数时遇到了麻烦。这是没有尝试附加到列表的基本代码。我减少了很多图形和轴设置。当这段代码坐下时,线条围绕图形扫描,当它到达标记所在的点时,标记闪烁然后消失。
fig = plt.figure(1)
ax = fig.add_subplot(111,projection='polar')
ax.set_theta_zero_location('N',offset=0)
ax.set_theta_direction(-1)
line, = ax.plot((0,0),(0,0))
list = []
def animate(i):
line.set_data((0,line_az_time[i][0]),(0,300))
if(line_az_time[i][1] in marker_time):
marker = plt.scatter(marker_az[0],marker_range[0])
list.append(marker)
del marker_az[0]
del marker_range[0]
return line, list # wrong return type?
return line, list # how to handle empty list before 1st marker appended?
def init():
line.set_data((0,0),(0,300))
return line,
ani = animation.FuncAnimation(fig,animate,np.arange(len(line_az_time)),
blit=True,interval=0,repeat=True,init_func=init)
plt.show()
'line_az_time'是格式[[angle1,time1],[angle2,time2] ...]的嵌套列表 基本上它可以节省角度和角度发生的时间。 'marker_xxx'变量是目标检测的角度,范围和时间。当线条变得动画时,它正在检查在那个时间和角度是否发生了检测。时间和检测始终是连续的,所以我只是在绘制后删除它们。
基本上我只需要保持“标记”散点在整个动画中保持不变。如前所述,我尝试将它们附加到列表并返回列表而不是“标记”本身。这样,一旦它们发生,它们都会被绘制出来。但那没用。我认为我很困惑的是将它们打包到什么类型的变量以及在将它们附加到变量后如何编写'return'行。
或者,如果还有其他方式,我也会对此持开放态度。