Matplotlib(六)quiver 箭头

matplotlib.pyplot.quiver是matplotlib表示二维箭头的类。其基本格式如下:

quiver([X, Y], U, V, [C], **kw)

X Y定义了箭头的起始位置,U V定义了箭头的方向,C代表箭头颜色。

Tips:Python接口中,中括号内的参数是可选的。**kw代表是参数字典(键值对),也可以省略(此时函数将会提供默认值)

几个箭头的特征:

  • 箭头大小(Arrow size) :默认情况,箭头将会被自动将其调整为合理的大小,修改默认行为,请使用scale或者scale_units 参数;
  • 箭头形状(Arrow shape):默认将会是一个稍微往回扫的箭头(swept-back)
  • 箭头轮廓(Arrow outline):线宽(linewidth)和边缘颜色(edgecolors)可以变改变;

参数

定义一个quiver需要去确定位置以及方向,向量长度、颜色、放大缩小性质都可以进行设置。下面简单介绍一下quiver的参数含义:

X,Y :一维或者二维的表示箭头位置的数组型(array-like)参数,如果没有给定将会通过一定的规则生成箭头的位置;

U,V:一维或者二维的表示箭头方向的数组型(array-like)参数;如何决定的取决于angles参数选择的是‘uv’(默认)还是‘xy’,对于前者仅与UV有关,他表示(U,V)与原点连线所呈的边与X正向的角度;后者不仅和XY有关还和UV有关,此时应该将UV理解为增量值。

C:一维或者二维的表示箭头颜色的数组型(array-like)参数,如果你需要直接设置颜色,请通过color参数;

units{‘width’, ‘height’, ‘dots’, ‘inches’, ‘x’, ‘y’, ‘xy’}, default: ‘width’:箭头单位大小

  • width height :轴的宽度、轴的高度;
  • dots inches:基于figure DPI设置的像素或英寸单位;
  • x y xy:X Y 或者 X 2 + Y 2 \sqrt{X^2+Y^2} X2+Y2 作为单位;

当发生放大或者缩小时,不对不同的units有不同的表现。对于 x y xy会随着放大或者缩小,对于其他的就将独立于放大和缩小操作

angles{‘uv’, ‘xy’} or array-like, default: ‘uv’

  • uv uv坐标所决定的与坐标轴x的夹角,与X Y数据无关;
  • xy 从(x,y)到(x+u,y+v)的箭头;
  • array_like数组中任意选择一个角度作为方向,此时U V决定了箭头的长度

scale:浮点型,可选,表示箭头单位放缩长度单位。默认情况为None,将会根据箭头的长度和数量来自动缩放;简单来说就是,箭头还是在原来的地方,但是放大和缩小

scale_units{‘width’, ‘height’, ‘dots’, ‘inches’, ‘x’, ‘y’, ‘xy’}:可选,为空的话,将会有scale进行控制,如果是width height将会是轴长度的一半;如果scale_units是x y将会根据xy的大小进行调整,如果想要绘制一个在x-y平面的向量,这个向量和我们一般的认知一样,那么请用选项angles='xy', scale_units='xy', scale=1

array-like类型在Python中表示满足一定要求的任何Python对象,该类型可以通过np.array构造ndarray对象。最常见的就是:常量、数组、满足一定要求的对象、list等。
1-D和2-D array-like典型例子 1-D [1,2,3] 2-D [[4,5,6],[7,8,9]]
meshgrid 的用法可以看这个文章

下面是直接根据起点和终点绘制向量的demo:

import numpy as np
import matplotlib.pyplot as plt
import random
g_limit=[0,0,0,0]
def plotVec(ax,spos,epos):
    g_limit[0]=np.min([spos[0],epos[0],g_limit[0]])
    g_limit[1]=np.max([spos[0],epos[0],g_limit[1]])
    g_limit[2]=np.min([spos[1],epos[1],g_limit[2]])
    g_limit[3]=np.max([spos[1],epos[1],g_limit[3]])
    g_limit[0]=g_limit[0]-np.abs(g_limit[0]-g_limit[1])*0.1
    g_limit[1]=g_limit[1]+np.abs(g_limit[0]-g_limit[1])*0.1
    g_limit[2]=g_limit[2]-np.abs(g_limit[2]-g_limit[3])*0.1
    g_limit[3]=g_limit[3]+np.abs(g_limit[2]-g_limit[3])*0.1

    dx=epos[0]-spos[0]
    dy=epos[1]-spos[1]
    
    ax.set_xlim(g_limit[0],g_limit[1])
    ax.set_ylim(g_limit[2],g_limit[3])
    ax.quiver(spos[0],spos[1],dx,dy,color='b',angles='xy',scale_units='xy', scale=1.)

ax=plt.subplot()
spos=[0,0]
epos=[2,2]
plotVec(ax,spos, epos)

OP=np.array([2,2])
M1=np.array([[random.uniform(-1,1),random.uniform(-1,1)],[random.uniform(-1,1),random.uniform(-1,1)]])
M2=np.array([[random.uniform(-1,1),random.uniform(-1,1)],[random.uniform(-1,1),random.uniform(-1,1)]])
M3=np.array([[random.uniform(-1,1),random.uniform(-1,1)],[random.uniform(-1,1),random.uniform(-1,1)]])

OPnew=np.matmul(OP,M1)
plotVec(ax,spos, OPnew)
OPnew=np.matmul(OP,M2)
plotVec(ax,spos, OPnew)
OPnew=np.matmul(OP,M3)
plotVec(ax,spos, OPnew)
plt.show()

在这里插入图片描述


[1] https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.quiver.html

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值