• Matplotlib(六)quiver 箭头


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

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

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    在这里插入图片描述


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

  • 相关阅读:
    三、基于图像分类预训练编码及图神经网络的预测模型 【框图+源码】
    c语言经典算法—二分查找,冒泡,选择,插入,归并,快排,堆排
    go语言 中 new能初始化哪些类型?
    【Flutter】下载安装Flutter并使用学习dart语言
    【深度学习】:《100天一起学习PyTorch》第七天之模型评估和选择(上):欠拟合和过拟合(含源码)
    3d可视化设备产品场景展示更加直观形象
    微信小程序 ---- 慕尚花坊 购物车
    mysql 指定库对所有表加tenant_id
    69 RGB图像转单色位图
    Linux安装mysql
  • 原文地址:https://blog.csdn.net/weixin_39258979/article/details/126437300