quiver函数绘图详解【一】
quiver(*args, **kw)
用途
绘制 2D 矢量场
调用方式如下:
quiver(U, V, **kw) quiver(U, V, C, **kw) quiver(X, Y, U, V, **kw) quiver(X, Y, U, V, C, **kw)
参数说明:
- • X 和 Y 是箭头的 x 和 y 坐标(默认是箭头的尾部)
- • U 和 V 是箭头矢量的 x 和 y 分量
- • C 是映射箭头和颜色的颜色数组
- • 所有参数可能是 1D或2D数组及序列。如果 X 和 Y 缺省,将视为规则网格。如果 U 和 V是 2D 数组,但 X 和 Y 是 1D 数组,并且 len(X) 和 len(Y) 与 U 的列和行相同,则使用 numpy.meshgrid 生成 2D 网格。
- • U,V,C 可能是 masked 数组,但是目前不支持 X 和 Y 。
关键字参数:
- • units:箭头单位,[ ‘width’ | ‘height’ | ‘dots’ | ‘inches’ | ‘x’ | ‘y’ | ‘xy’ ]
(1)‘width’ or ‘height’: axes 的宽或高
(2)‘dots’ or ‘inches’: pixels 或 inches, 依赖于 figure dpi
(3)‘x’, ‘y’, or ‘xy’: X, Y, 或 sqrt(X^2+Y^2) 数据单位
注意:箭头比例的不同取决于 units。units 为 'x' 或 'y' 时, 箭头会变大;对于其它单位,箭头大小不会发生变化。units 为 ’width‘ 或 'height' 时,当调整窗口大小时,箭头的大小会随 axes 宽和高的变化而变化,而当 units 为 'dots' 或 'inches' 时,改变窗口大小并不会改变箭头的大小。
- • angles: [ ‘uv’ | ‘xy’ | array ]
默认为 ’uv‘,箭头 axes 宽高比为1。如果 U == V,那么沿着水平轴逆时针旋转 45 度是箭头的方向(箭头指向右侧)。如果是 'xy',箭头的点由 (x,y) 指向 (x + u, y + v)。使用此设置可以绘制梯度场。也可以将随机角度作为数组进行传递(同样沿水平轴逆时针旋转)。
注意:angles = 'xy' 时,反转数据轴的时候同样会反转arrow。
- • scale: 每单位长度的数据单位,[ None | float ]
比如:每个绘图宽度单位为 m/s。scale 值越小,arrow 越长。当为 None 时,自适应算法会根据 平均矢量长度 和 矢量数 计算一个值。箭头的长度单位可以通过 scale_units 参数设置。
- • scale_units: None, 或 units 参数选项
例如:如果 scale_units = 'inches',scale = 2,(u, v) = (1, 0),那么矢量将是 0.5 inches。如果 scale_inches = 'width',那么矢量将是 axes 宽的一半。
如果 scale_inches = ’x‘,那么矢量长度将是 x-axis 单位的一半。要在 xy 平面绘制矢量图,u 和 v 单位要和 x 和 y 一致。使用如下设置 “angles=’xy’, scale_units=’xy’, scale=1”。
- • width: 杆的宽度。
默认值取决于 units 参数的设置及矢量数。典型的起始值为 绘图宽度的 0.005 倍。
- • headwidth: scalar,箭头宽度,为 杆宽的倍数。
默认值为 3.
- • headlength: scalar,箭头长度, 为 杆宽的倍数。
默认值为 5。
- • headaxislength: scalar,在杆的交点处箭头的长。
默认值为 4.5。
- • minshaft: scalar,小于箭头 scale 的长度,以箭头长度为单位。
不要设置此值小于1,否则那些小箭头会变得很奇怪。默认值为1。增大此值会使箭头变细。一般情况下不需要更改此值。
- • minlength: scalar,如果箭头的长度小于此值,将绘制以此值为半径的点。
默认值为 1
- • pivot: [ ‘tail’ | ‘mid’ | ‘middle’ | ‘tip’ ]
旋转轴
- • color: [ color | color sequence ]
如果 C 给定了,则 color 参数将不会生效。
注意:quiver默认是稍微后突一些的箭头。 如果要使箭头是三角形,设置参数 headlength == headaxislength; 如果要让箭头更尖,减小 headwidth 或是 增加 headlength 和 headaxislength 参数; 为了让箭头相对于杆更小,可减小所有的 head 类参数。
示例
说的再多都没有图形看的直观。
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
U = np.cos(X)
V = np.sin(Y)
plt.figure()
plt.title('Arrows scale with plot xy')
Q = plt.quiver(X, Y, U, V, units='xy')
plt.show()
可以看出上图矢量箭头比较密集,下面可以仅选取数组的一部分来绘制
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
U = np.cos(X)
V = np.sin(Y)
plt.figure()
plt.title('Arrows scale with plot xy')
Q = plt.quiver(X[::5,::5], Y[::5,::5], U[::5,::5], V[::5,::5], units='xy')
plt.show()
可以看出箭头的密度变小了,如果放大看的话,箭头并不是三角形的,下面设置为三角形看看
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
U = np.cos(X)
V = np.sin(Y)
plt.figure()
plt.title('Arrows scale with plot xy')
Q = plt.quiver(X[::5,::5], Y[::5,::5], U[::5,::5], V[::5,::5], units='xy', headlength = 5, headaxislength = 5)
plt.show()
由放大后的图可以看出箭头已经变为三角形了
再试试其它参数看看
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
U = np.cos(X)
V = np.sin(Y)
plt.figure()
plt.title('Arrows scale with plot xy')
Q = plt.quiver(X[::5,::5], Y[::5,::5], U[::5,::5], V[::5,::5], units='xy', headlength = 5, headaxislength = 5, headwidth = 5)
plt.show()
和之前相比, headwidth 参数设置为 5,默认值为3,也就是说箭头宽度为杆宽的5倍。与上图相比,箭头变大了。
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
U = np.cos(X)
V = np.sin(Y)
plt.figure()
plt.title('Arrows scale with plot xy')
Q = plt.quiver(X[::5,::5], Y[::5,::5], U[::5,::5], V[::5,::5], units='xy', headlength = 5, headaxislength = 5, headwidth = 5, width = 0.01)
plt.show()
这是杆宽变小后的图。之前的杆宽设置的都是程序自行设定的,基本上都符合要求,所以一般情况下,width 参数是不需要设置的。
如果想让箭头变尖一些呢
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
U = np.cos(X)
V = np.sin(Y)
plt.figure()
plt.title('Arrows scale with plot xy')
Q = plt.quiver(X[::5,::5], Y[::5,::5], U[::5,::5], V[::5,::5], units='xy', headlength = 5, headaxislength = 3, headwidth = 5)
plt.show()
减小 headaxislength
也可以这样做来达到上面的效果
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
U = np.cos(X)
V = np.sin(Y)
plt.figure()
plt.title('Arrows scale with plot xy')
Q = plt.quiver(X[::5,::5], Y[::5,::5], U[::5,::5], V[::5,::5], units='xy', headlength = 7, headaxislength = 5, headwidth = 5)
plt.show()
仔细对比上面两张图,可以发现,增大 headlength 虽然也能让箭头变成明显的后突类型,但是箭头的长度增加了。
如果减小 headlength 呢
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
U = np.cos(X)
V = np.sin(Y)
plt.figure()
plt.title('Arrows scale with plot xy')
Q = plt.quiver(X[::5,::5], Y[::5,::5], U[::5,::5], V[::5,::5], units='xy', headlength = 3, headaxislength = 5, headwidth = 5)
plt.show()
谁会需要这种形状的矢量箭头呢==
增大 headaxislength 同样可以得到上图的矢量箭头==
相关文章
- Jgit的使用笔记
- 利用Github Action实现Tornadofx/JavaFx打包
- 叹息!GitHub Trending 即将成为历史!
- 微软软了?开源社区讨论炸锅,GitHub CEO 亲自来答
- GitHub Trending 列表频现重复项,前后端都没去重?
- Photoshop Elements 2021版本软件安装教程(mac+windows全版本都有)
- (ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)
- (ps全版本)Photoshop cc2018的安装与破解教程(mac+windows全版本,包括2023
- 环境搭建:Oracle GoldenGate 大数据迁移到 Redshift/Flat file/Flume/Kafka测试流程
- 每个开发人员都要掌握的:最小 Linux 基础课
- 来撸羊毛了!Windows 环境下 Hexo 博客搭建,并部署到 GitHub Pages
- 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 【GitHub日报】22-10-09 zustand、neovim、webtorrent、express 等4款App今日上新
- 【GitHub日报】22-10-10 brew、minio、vite、seaweedfs、dbeaver 等8款App今日上新
- 【GitHub日报】22-10-11 cobra、grafana、vue、ToolJet、redwood 等13款App今日上新
- Photoshop 2018 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2017 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2020 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
- 最新版本Photoshop CC2018软件安装教程(mac+windows全版本都有,包括2023