理解Matplotlib的箭头绘图

7
我正在尝试理解plt.quiver()的工作原理。我的问题如下:
我将一个简单的向量(1,1)绘制如下:
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(2)
ax = fig.add_subplot(111)
ax.quiver(0,0, 1, 1, units = 'xy', scale = 1)
plt.xticks(range(-5,6))
plt.yticks(range(-5,6))
plt.grid()

我会期望箭头从(0,0)(1,1),但结果与此略有偏差:vector 1,1 同样地,我试图绘制向量(0,3)的箭头,而得到的箭头似乎是针对向量(0,3.5)的...

enter image description here

我的假设是这与kwargs'units''scale''angles''scale_units'有关。我已经阅读了相关文档,但不完全理解它们的工作原理。如果能给出一个简单易懂的解释就太好了!

你可以试试将它们绘制在已有的图形上,然后报告剩余的问题,怎么样? - Chiel
使用代码 ax.quiver((0,0), (0,0), (1,0), (1,3), units = 'xy', scale = 1),得到了相同的结果(只是组合在一起)。即一个图表,有一条箭头从0,0指向0,3.5左右,另一条箭头从0,0指向约0.9,1.2。 - RSHAP
我想那么你刚刚回答了自己的问题 :) - Chiel
怎么回事?为什么它们没有去到预期的坐标,也就是我提供的那些坐标? - RSHAP
看一下关于画面比例的回答,那么你的问题就会得到解决。 - Chiel
2个回答

8

如果将图形的长宽比调整为1,矢量将显示为正确的比例:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.quiver((0,0), (0,0), (1,0), (1,3), units = 'xy', scale = 1)
plt.axis('equal')
plt.xticks(range(-5,6))
plt.yticks(range(-5,6))
plt.grid()
plt.show()

enter image description here


5
你可以尝试这段代码。
import matplotlib.pyplot as plt

fig = plt.figure(2)
ax = fig.add_subplot(111)
ax.quiver(0,0, 1, 1,angles='xy', scale_units='xy', scale = 1)
plt.xticks(range(-5,6))
plt.yticks(range(-5,6))
plt.grid()
plt.draw()
plt.show()

这是输出结果

请记住,quiver的前两个参数是矢量尾部的x和y坐标,接下来的两个参数分别是沿x和y方向的矢量长度。 angle ='xy'使箭头从矢量尾指向其顶部。

您可以在http://matplotlib.org/1.3.1/api/pyplot_api.html#matplotlib.pyplot.quiver了解更多关于matplotlib.quiver的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接