matplotlib 无法使用播放器类制作箭图动画

j2cgzkjk  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(140)

我使用Player类来实现这里定义的动画。它包含了一个播放按钮控制台,非常不错,我已经用它来完成各种设置,例如动画热图。
但是,我在为使用quiver创建的向量设置动画时遇到了问题。
我不会加载定义类本身的所有代码,但下面是我的示例,我尝试制作一个箭头序列的动画。时间t时箭头的大小等于信号值2*sin(t):

fig,ax=plt.subplots(1)
t = np.linspace(0,6*np.pi, num=100)
s = 2*np.sin(t)
radius=s
x= np.multiply(radius,np.cos(t))
y =np.multiply( radius, np.sin(t))
point_vector,=ax.quiver(0,0,[],[])

def update(i):
    point_vector.set_UVC(x[i],y[i])

ani = Player(fig, update, maxi=len(t)-1)
plt.show()

错误消息指出

ValueError: Argument U has a size 0 which does not match 1, the number of arrow 
positions

我相信这是由箭袋命令本身引起的。

ubby3x7f

ubby3x7f1#

下面的代码应该可以做到这一点。

  • 我画出箭筒的初始方向。错误信息确切地告诉你:x,y和u,v必须具有相同的大小。
  • ax.quiver只返回一个句柄,因此等号前没有逗号。
  • 我添加了几个关键字参数以更好地可视化箭筒。
  • 我调整了轴限制,以获得更好的可视化效果。
fig,ax=plt.subplots(1)
t = np.linspace(0,6*np.pi, num=100)
s = 2*np.sin(t)
radius=s
x = np.multiply(radius,np.cos(t))
y = np.multiply( radius, np.sin(t))
point_vector=ax.quiver(0, 0, x[0], y[0], angles='xy', scale_units='xy', scale=1)
l = x.max()
if y.max() > l:
    l = y.max()
ax.set_xlim(-l, l)
ax.set_ylim(-l, l)
ax.set_aspect("equal")

相关问题