matplotlib中的箭袋动画

2024-09-29 19:34:06 发布

您现在位置:Python中文网/ 问答频道 /正文

为了回答这个问题,Plotting animated quivers in Python,我遵循了一些建议的代码,但是我发现我有一个问题没有得到解决。考虑以下代码:

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

def ufield(x,y,t):
    return np.cos(x+y)*np.sin(t)

def vfield(x,y,t):
    return np.sin(x+y)*np.cos(t)

x = np.linspace(0,10, num=11)
y = np.linspace(0,10, num=11)
X,Y = np.meshgrid(x,y)
t = np.linspace(0,1)

def update_quiver(j, ax, fig):
    u = ufield(X,Y,t[j])
    v = vfield(X,Y,t[j])
    Q.set_UVC(u, v)
    ax.set_title('$t$ = '+ str(t[j]))
    return Q,

fig =plt.figure()
ax = fig.gca()
u = ufield(X,Y,t[0])
v = vfield(X,Y,t[0])
Q = ax.quiver(X, Y, u, v)
ax.set_title('$t$ = '+ str(t[0]))
ax.set_xlabel('$x$')
ax.set_ylabel('$y$')

ani = animation.FuncAnimation(fig, update_quiver, 
                              frames = range(0,t.size),
                              interval=1,fargs=(ax, fig))
plt.show()

这段代码运行良好,没有问题。但是,如果我想使用init_func,而且我想用我的动画做更多的事情,我尝试了:

^{pr2}$

从脚本主体中删除这些行

u = ufield(X,Y,t[0]) 
v = vfield(X,Y,t[0]) 
Q = ax.quiver(X, Y, u, v)

并按如下方式更新动画线:

ani = animation.FuncAnimation(fig, update_quiver, 
                              frames = range(0,t.size),
                              init_func=init_quiver,
                              interval=1,fargs=(ax, fig))
plt.show()

但是当我运行这个时,我看到了第一帧,没有任何更新。在


Tags: importreturndefasnpfigupdateplt
1条回答
网友
1楼 · 发布于 2024-09-29 19:34:06

当我运行你的脚本时,我看到你描述的行为,在我运行它的终端中,我得到一个错误,它的回溯结尾是:

 File "quiv.py", line 21, in update_quiver
Q.set_UVC(u, v)
NameError: global name 'Q' is not defined

您可以通过添加行来纠正此问题

global Q 

作为init_quiver函数的第一行。在

完整的代码现在是:

^{pr2}$

相关问题 更多 >

    热门问题