Python的matplotlib.pyplot.quiver如何正常工作?

Fer*_*cía 10 python matplotlib

我试图了解NumPy模块中的箭头功能是如何工作的.据推测,它允许以图形方式显示两个阵列的值,例如水平和垂直速度.我有以下非常简单的例子,但我只是为了看看你是否可以帮助我找出我做得不好的事情来展示它:

x = np.linspace(0,1,11)
y = np.linspace(1,0,11)
u = v = np.zeros((11,11))
u[5,5] = 0.2

plt.quiver(x, y, u, v)
Run Code Online (Sandbox Code Playgroud)

代码生成下图:

http://imgur.com/Rg3ZoHl

如您所见,箭头不是箭头,而是一条线,它长于0.2.我的目的是得到一个长度为0.2的箭头,我想我可以用它来做quiver.可能吗?或者我应该更好地使用另一个命令?

Mik*_*ler 15

matplotlib箭袋自动缩放.将比例设置为1在x和y中得到0.2个单位:

x = np.linspace(0,1,11)
y = np.linspace(1,0,11)
u = v = np.zeros((11,11))
u[5,5] = 0.2

plt.quiver(x, y, u, v, scale=1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果未设置scale,matplotlib将根据平均向量长度和向量数使用自动缩放算法.由于你只有一个长度大于零的向量,它变得非常大.添加更多矢量使箭头连续变小.

要使箭头具有相同的x和y扩展名,需要进行一些调整:

x = np.linspace(0,1,11)
y = np.linspace(1,0,11)
u = v = np.zeros((11,11))
u[5,5] = 0.2

plt.axis('equal')
plt.quiver(x, y, u, v, scale=1, units='xy')
Run Code Online (Sandbox Code Playgroud)

两个轴必须相等,并且需要将单位设置为xy.

在此输入图像描述


For*_*umb 5

与您的问题无关,但值得一提的是:有趣的是,通过写作,u[5, 5] = 0.2您也在暗示v[5, 5] = 0.2(如对角线箭头所示),因为在您写u = v = np.zeros((11, 11)). 你可以通过写来避免这种情况

u = np.zeros((11, 11))
v = np.zeros((11, 11))
Run Code Online (Sandbox Code Playgroud)

制作uv相互独立。