为什么matplotlib.pyplot.juck文档指出U、V参数的顺序不正确



在做任何事情之前,这里有Google Colab链接来展示这个问题:https://colab.research.google.com/drive/1sq8Dn7wdNqbfRmz2SyQnj0MfRirxmneA?usp=sharing

Im使用matplotlib绘制一些由生成的梯度场

x,y = numpy.gradient(array_2d)

并注意到了奇怪的事情。文档指出,要绘制2d字段,需要传递U(x(和V(y(。示例:

plt.quiver(x, y)

但当我对高斯场这样做的时候,很明显,有些地方出了问题,因为结果画出了四周的箭头。但当我反转参数的顺序时,例如:

plt.quiver(y, x)

得到期望的完美梯度场。

我弄错了(文档、代码(,还是真的有问题?

别忘了查看Google Colab以更好地了解情况。

quiver函数及其文档是正确的,您只是错误地解释了gradient函数的输出。

在输出中,第一个数组(np.gradient(gaussianMatrix)[0](是沿着第一轴(axis=0=数组的行(的梯度,第一轴是matplotlib中的y轴,第二个数组是第二轴(axis=1=数组的列(,第二轴是matplotlib中的x轴。

这也在文档中进行了解释(在第三个示例之后的示例部分(:

对于二维数组,返回的是两个按轴在本例中,第一个数组代表行中的梯度列方向上的第二个:

为了与matplotlib文档保持一致,如果不传递箭头位置而只传递方向,我建议使用uv,而不是xy。所以你的代码应该是:

v,u = numpy.gradient(array_2d)
plt.quiver(u, v)

最新更新