The quiver文档 https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.quiver.html says:
要在 x-y 平面上绘制向量,其中 u 和 v 与 x 和 y 具有相同的单位,请使用angles='xy'
, scale_units='xy'
, scale=1
因此,使用这个论点你的问题将得到解决。那是因为关键字units
影响箭头尺寸除了长度, and scale_units
影响only长度。
Edit:
matplotlib 箭袋的参数行为示例
确实,文档并不完全清楚,并且有许多具有相似名称的参数,除此之外,这些参数是 quiver 所独有的。
下面有许多不同参数的行为示例,特别是该问题感兴趣的参数:angles
, units
and scale_units
。每个示例都有一个可以通过单击展开的图像。
所有图的数据都是相同的,可以使用以下代码重现:
x = np.linspace(0,50,5)
y = np.linspace(-150,150,7)
X,Y = np.meshgrid(x,y)
U = 3.5*np.ones_like(X)
V = 3.5*np.ones_like(Y)
angles
文档中的条目是:
角度:[‘uv’| ‘xy’],数组,可选
确定箭头角度的方法。默认为“uv”。
‘uv’:箭头轴纵横比为 1,因此如果 U*==*V,则绘图上箭头的方向与水平轴逆时针方向成 45 度(向右为正)。
‘xy’:箭头从 (x,y) 指向 (x+u, y+v)。例如,使用它来绘制梯度场。
在我们的例子中,U 和 V 之间的比率为 1,因此在“uv”情况下箭头将指向 45 度,但是,在“xy”情况下,由于 y 轴和 x 轴的范围不同,因此箭头不会指向 45 度,以保留从 (x,y) 到 (x+u, y+v) 的位移。考虑这一点很重要,因为根据轴的纵横比,梯度 (u,v)=(1,1) 不会有 45 度角。
units
文档的入口是:
单位:[‘宽度’| ‘高度’| ‘点’| ‘英寸’| ‘x’| ‘y’| ‘xy’]
箭头尺寸(长度除外)以该单位的倍数测量。
‘width’或‘height’:轴的宽度或高度
‘dots’ 或 ‘inches’:像素或英寸,基于图形 dpi
‘x’、‘y’或‘xy’:分别为 X、Y 或数据单位
箭头的比例根据单位的不同而不同。对于“x”或“y”,箭头随着放大而变大;对于其他单位,箭头大小与缩放状态无关。对于“width”或“height”,当窗口大小调整时,箭头大小分别随着轴的宽度和高度而增加;对于“点”或“英寸”,调整大小不会改变箭头。
如上所述,该参数定义了测量除箭头长度之外的所有尺寸的单位。然而,参数宽度(这是最相关的,因为箭头头宽和头长等被定义为它的倍数)有一个默认值,这取决于使用的单位。
下面是不同单位的示例,将宽度固定为可比较的情况。参数点或英寸几乎是等效的,因此示例中仅考虑其中之一。因此,“宽度”和“高度”的宽度设置为 0.01,“点”的宽度设置为 3,“x”、“y”和“xy”的宽度设置为 2。根据后端的不同,不固定相同的宽度会产生不同的结果:即matplotlib 内联 https://i.stack.imgur.com/AvvIZ.png在 jupyter 中,在任何情况下都没有区别Qt5 https://i.stack.imgur.com/5In58.png有一些,但很难解释,因为宽度未知。
可以看出,由于绘图轴的宽度大于高度,因此将单位设置为“宽度”会比“长度”产生更粗的箭头,因为宽度相同。比较“x”、“y”和“xy”时也是如此,根据 x 轴测量的距离 1 远大于根据 y 轴测量的距离 1。
scale_units
文档中的条目是:
比例单位:[‘宽度’| ‘高度’| ‘点’| ‘英寸’| ‘x’| ‘y’| ‘xy’],无,可选
如果比例 kwarg 为 None,则为箭头长度单位。默认为“无”。
例如scale_units 为“英寸”,scale 为 2.0,且 (u,v) = (1,0),则矢量将为 0.5 英寸长。
如果scale_units是‘width’/‘height’,那么向量将是轴的宽度/高度的一半。
如果 scale_units 为“x”,则向量将为 0.5 个 x 轴单位。要在 x-y 平面上绘制向量,其中 u 和 v 具有与 x 和 y 相同的单位,请使用angle='xy'、scale_units='xy'、scale=1。
关于调整绘图大小时缩放的说明与单位相同。然而,“如果比例 kwarg 为 None”的陈述完全不清楚并导致错误。
如果scale为None,则箭头的长度将根据scale_units设置为默认值,以保持宽度和高度之间合理的比例并使箭头保持良好的形状(即合理的头部)。然后,在调整绘图大小之前,scale_units 不会被正确理解(由于缩放比例取决于scale_units)。
如果比例与“无”不同,则箭头长度不再设置为其默认值,它遵循文档中的示例。
下面的图比较了不同的scale_units值,其中scale=1,单位设置为其默认值“width”。
可以看出,“y”情况下,由于 U、V 向量之间的大小差异(约为 5)和 y 比例(在 -150 到 150 之间)之间的差异,使得箭头看起来像点,而在这种情况下“宽度”和“长度”的大小是绘图轴大小的 5 倍,使得箭头变得巨大。