matplotlib Python中的分散动画

vsaztqbk  于 11个月前  发布在  Python
关注(0)|答案(1)|浏览(98)

我试图在Python 3.6(在Spyder IDE中)中制作散点图的动画,有几个教程/示例(abc和许多其他),但是我的更新函数不知何故收到了一组与我认为我提供的坐标非常不同的坐标。
下面是一个简化的示例代码,其中有4个点向中心移动。我绘制了两次,第一次绘制成直线,第二次绘制成动画。直线图看起来是正确的,但是动画显示了非常不同的行为,无论是点的位置还是它们的轨迹。我推断我错误地向更新函数提供了坐标信息,但是我似乎无法确定为什么/如何。
我可以提供一些图表来说明应该发生什么和应该发生什么,不过为了简洁起见,我现在只提供这个示例代码。

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.animation as anim

npt=4
ntime=101
solx=np.zeros((npt,ntime))
soly=np.zeros((npt,ntime))
solx[0,0:]=np.linspace(0,40,ntime)
solx[1,0:]=solx[0,0:];
solx[2,0:]=100-solx[0,0:];
solx[3,0:]=solx[2,0:]
soly[0,0:]=np.linspace(0,80,ntime)
soly[1,0:]=200-soly[0,0:]
soly[2,0:]=soly[0,0:]
soly[3,0:]=soly[1,0:]

#%% Plots
colord=mpl.cm.gist_ncar(np.linspace(0,0.9,npt))
of2,oa2=plt.subplots(1)
for cnt in range(0,npt): oa2.plot(solx[cnt,0:],soly[cnt,0:],c=colord[cnt])

of3,oa3=plt.subplots()
osc3=oa3.scatter(solx[0:,0],soly[0:,0],c=colord,marker='+')
def aninit():
    osc3.set_offsets(np.stack((solx[0:,0],soly[0:,0]),axis=0))
    return osc3,
def aniupdate(i):
    osc3.set_offsets(np.stack((solx[0:,i],soly[0:,i]),axis=0))
    return osc3,

ani=anim.FuncAnimation(of3,aniupdate,init_func=aninit,frames=range(0,ntime),interval=100,blit=True,repeat=True,repeat_delay=1000)
plt.show()

字符串

woobm2wo

woobm2wo1#

如果更换

np.stack((solx[0:,0],soly[0:,0]),axis=0)
np.stack((solx[0:,i],soly[0:,i]),axis=0)

字符串
使用:

list(zip(solx[0:,0],soly[0:,0]))
list(zip(solx[0:,i],soly[0:,i]))


或者(如果你想使用numpy数组而不是列表:

np.array([solx[0:,0],soly[0:,0]]).T
np.array([solx[0:,i],soly[0:,i]]).T


aninit()aniupdate(i)函数中,行为应该如预期的那样。
下面是我用来绘制图的代码:

def aninit():
    offsetlist = np.array([solx[0:,0],soly[0:,0]]).T
    osc3.set_offsets(offsetlist)
    return osc3,

def aniupdate(i):
    offsetlist = np.array([solx[0:,i],soly[0:,i]]).T
    osc3.set_offsets(offsetlist)
    return osc3,


的数据

参考资料:

相关问题