使用matplotlib的quiver绘制向量

讨论 我不是赌鬼
Lv5 宗师级炼丹师
发布在 Matplotlib   6561   0
讨论 我不是赌鬼   6561   0

    基于两个原因,我专门为向量的绘制写了这篇博客:

    • 向量在线性代数上有重要的作用,这使得学生或教师有必要掌握如何绘制向量。
    • 用以绘制向量的quiver()比较难理解, 许多博主在不看源码的情况下就抄来抄去。
      undefined
      import matplotlib.pyplot as plt
      import numpy as np
      fig,ax=plt.subplots()
      #绘制从[0,0]到[2,2]的向量
      a=ax.quiver(0, 0, 2, 2, angles='xy', scale_units='xy', scale=1)
      ax.set_xlim([-1, 10])
      ax.set_ylim([-1, 10])
      plt.show()
      quiver()文档中对其最简单的定义是:Plot a 2D field of arrows,
      #Call signature
      #X,Y定义箭头的位置,U,V定义箭头的方向,C是色彩矩阵
      quiver([X, Y], U, V, [C], **kw)
      可以简单的理解为绘制2D向量场(例如水流,磁场方向等),这从文档中给出的例程也可以看出。
      undefined

    该函数为了能够更好地绘制“向量场”,而开放了一些比较难以理解的参数,我们这次主题明确,学习画“向量”,而非向量场,所以后面的内容只讲绘制简单的向量。

    说实在的,我基本是把与quiver相关的文档从头到尾看了一遍,都没明白为什么X,Y会被中括号包着, 而且使用这个函数的时候也不需要用[]把X,Y绑在一起,参数C是颜色矩阵,不需要理会,用color参数即可,按下述代码就能正常运行。

    #X,Y定义箭头的位置,U,V定义箭头的方向
    quiver(X,Y, U, V,**kw)

    什么是箭头的位置呢?我们可能会理解成一个向量的终点。其实并不是,(X,Y)是向量的起点,

    那箭头的方向(U,V)又是什么意思呢?显然,就是(X,Y)要向(U,V)连线,不过,需要注意的是,箭尖所在位置并不是(U,V),而是(X+U,Y+V)。

    那么假设我需要画一条起点为(X,Y),终点为(EX,EY)的向量,我需要令U=EX-X,V=EY-Y。

    如果我们现在要绘制两个向量,我们可以用两次quiver(推荐,简单),也可以这样写:

    import matplotlib.pyplot as plt
    import numpy as np
    
    fig,ax=plt.subplots()
    #A起点坐标(1,2),终点坐标(6,8)
    A_START=[1,2]
    A_END=[6,8]
    
    #A起点坐标(0,8),终点坐标(6,1)
    B_START=[0,8]
    B_END=[6,1]
    
    X=[A_START[0],B_START[0]]
    Y=[A_START[1],B_START[1]]
    
    U=[A_END[0]-A_START[0],B_END[0]-B_START[0]]
    V=[A_END[1]-A_START[1],B_END[1]-B_START[1]]
    
    ax.quiver(X,Y,U,V,angles='xy', scale_units='xy', scale=1)
    ax.set_xlim([-1, 10])
    ax.set_ylim([-1, 10])
    plt.show()

    undefined
    最后讲一下**kw,文档有指出

    To plot vectors in the x-y plane, with u and v having the same units as x and y, use angles='xy', scale_units='xy', scale=1. 翻译:如果要将向量画在x-y平面上,且u与v的单位与x,y保持一致,则设置angles='xy', scale_units='xy', scale=1

    quiver(X,Y, U, V, C,angles='xy', scale_units='xy', scale=1)

    另外,对于线进行设定的基本参数,quiver()也都能用上去

    版权声明:作者保留权利,不代表意本站立场。如需转载请联系本站以及作者。

    参与讨论

    回复《 使用matplotlib的quiver绘制向量

    EditorJs 编辑器

    沙发,很寂寞~
    反馈
    to-top--btn