基于两个原因,我专门为向量的绘制写了这篇博客:
- 向量在线性代数上有重要的作用,这使得学生或教师有必要掌握如何绘制向量。
- 用以绘制向量的quiver()比较难理解,
许多博主在不看源码的情况下就抄来抄去。
quiver()文档中对其最简单的定义是:Plot a 2D field of arrows,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()
可以简单的理解为绘制2D向量场(例如水流,磁场方向等),这从文档中给出的例程也可以看出。#Call signature #X,Y定义箭头的位置,U,V定义箭头的方向,C是色彩矩阵 quiver([X, Y], U, V, [C], **kw)
该函数为了能够更好地绘制“向量场”,而开放了一些比较难以理解的参数,我们这次主题明确,学习画“向量”,而非向量场,所以后面的内容只讲绘制简单的向量。
说实在的,我基本是把与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()
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()也都能用上去