matplotlib.pyplot.quiver使用指南

1. 引子

X = np.arange(-10, 10, 1)
Y = np.arange(-10, 10, 1)
# meshgrid 生成网格,此处生成两个 shape = (20,20) 的 ndarray, 详见参考资料2,3
U, V = np.meshgrid(X, Y)
C = np.sin(U)
fig, ax = plt.subplots()
# 绘制箭头
q = ax.quiver(X, Y, U, V, C)
# 该函数绘制一个箭头标签在 (X, Y) 处, 长度为U, 详见参考资料4
ax.quiverkey(q, X=0.3, Y=1.1, U=10,
             label='Quiver key, length = 10', labelpos='E')
plt.show()

效果如下图所示:

pyplot

2. matplotlib.pyplot.quiver

根据 matplotlib.pyplot.quiver.html显示,该函数原型 matplotlib.pyplot.quiver(*args, data=None, **kw) 签名如下:

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

其中 X, Y 定义了箭头的位置, U, V 定义了箭头的方向, C 作为可选参数用来设置颜色。
下面是几个常见的参数:

  • units: 此参数指示了除箭头长度外,其他尺寸的变化趋势,以该单位的倍数测量。可取值为 {'width', 'height', 'dots', 'inches', 'x', 'y' 'xy'}, 默认是 'width'。需要配合 scale 参数使用。

  • scale: float, optional。此参数是每个箭头长度单位的数据单位数,通常该值越小,意味着箭头越长,默认为 None ,此时系统会采用自动缩放算法。箭头长度单位由 scale_units 参数指定。

  • scale_units: 此参数是可选参数,其中包含以下值:{'width', 'height', 'dots', 'inches', 'x', 'y', 'xy'}, 一般当 scale=None 时该选项指示长度单位,默认为 None

  • angles: 此参数指定了确定箭头角度的方法,可以取 {'uv', 'xy'} 或者 array-like, 默认是 'uv' 。 设计原因是 因为图的宽和高可能不同,所以 x 方向的单位长度和 y 方向的单位长度可能不同,这时我们需要做出选择,一是不管长度对不对,角度一定要对,此时 angles='uv',二是不管角度了,只要长度对就可以了,此时 angles='xy'。当该值为一个 array 的时候,该数组应该是以度数为单位的数组,表示了每一个箭头的方向,如下所示:

fig, ax = plt.subplots()
# 以水平轴按照 angles 参数逆时针旋转得到箭头方向, units='xy' 指出了箭头长度计算方法
ax.quiver((0, 0), (0, 0), (1, 0), (1, 3), angles=[60, 300], units='xy', scale=1, color='r')
plt.axis('equal')
plt.xticks(range(-5, 6))
plt.yticks(range(-5, 6))
plt.grid()  
plt.show()
pyplot
  • pivot: {'tail', 'mid', 'middle', 'tip'}, 默认为 'tail'。该参数指定了箭头的基点(旋转点)。
  • width:此参数是轴宽,以箭头为单位。
  • headwidth:该参数是杆头宽度乘以杆身宽度的倍数。
  • headlength:此参数是长度宽度乘以轴宽度。
  • headwidth:该参数是杆头宽度乘以杆身宽度的倍数。
  • headaxislength:此参数是轴交点处的头部长度。
  • minshaft:此参数是箭头缩放到的长度,以头部长度为单位。
  • minlength:此参数是最小长度,是轴宽度的倍数。

3. quiver 示例

  • 以箭头中间为基点,并在该点画出一个红色的点:
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
U, V = np.cos(X), np.sin(Y)
fig, ax = plt.subplots()

ax.set_title("pivot='mid'; every third arrow; units='inches'")
Q = ax.quiver(X[::3, ::3], Y[::3, ::3], U[::3, ::3], V[::3, ::3], units='inches', pivot='mid', color='g')
qk = ax.quiverkey(Q, 0.9, 0.9, 1, r'$1 \frac{m}{s}$', labelpos='E',
                   coordinates='figure')
ax.scatter(X[::3, ::3], Y[::3, ::3], color='r', s=5)
plt.show()
pyplot
  • 头部, 并为每个箭头设置颜色和大小
X, Y = np.meshgrid(np.arange(0, 2 * np.pi, .2), np.arange(0, 2 * np.pi, .2))
U, V = np.cos(X), np.sin(Y)
fig, ax = plt.subplots()
# M 为颜色矩阵
M = np.hypot(U, V)
ax.set_title("pivot='tip'; scales with x view")
Q = ax.quiver(X, Y, U, V, M, units='xy', scale=1 / 0.15, pivot='tip')
qk = ax.quiverkey(Q, 0.9, 0.9, 1, r'$1 \frac{m}{s}$', labelpos='E',
                  coordinates='figure')
ax.scatter(X, Y, color='r', s=1)
plt.show()
pyplot

4. 参考资料

1. Quiver Simple Demo

2. numpy.meshgrid

3. Numpy中的meshgrid()函数

4. matplotlib.axes.Axes.quiverkey

5. matplotlib quiver:清奇的脑回路

6. Advanced quiver and quiverkey functions

  • 10
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
matplotlib.pyplotpython中的一个绘图库,它可以让用户快速绘制出各种类型的图表。下面是matplotlib.pyplot的一些基本使用方法: 1. 导入模块 在使用matplotlib.pyplot之前,需要首先导入模块: ``` import matplotlib.pyplot as plt ``` 2. 绘制简单图形 绘制简单的图形可以使用plot()函数,如绘制一条直线: ``` plt.plot([1,2,3,4]) ``` 该函数会自动将输入的数据作为y轴的值,x轴的值则默认为数据的索引。 同时,也可以传入两个列表,分别作为x轴和y轴的值: ``` plt.plot([1,2,3,4], [1,4,9,16]) ``` 3. 添加图表标题、坐标轴标签等 可以使用xlabel()、ylabel()、title()等函数添加坐标轴标签、图表标题等: ``` plt.plot([1,2,3,4], [1,4,9,16]) plt.xlabel('x label') plt.ylabel('y label') plt.title('title') ``` 4. 绘制多个图形 可以使用subplot()函数在同一张图表中绘制多个图形,如下例中绘制一张包含两个子图的图表: ``` plt.subplot(1,2,1) plt.plot([1,2,3,4], [1,4,9,16], 'ro') plt.title('first') plt.subplot(1,2,2) plt.plot([1,2,3,4], [1,4,9,16], 'b^') plt.title('second') ``` 其中,subplot()函数的三个参数分别表示子图的行数、列数、当前子图的编号。 5. 绘制不同类型的图形 matplotlib.pyplot可以绘制多种类型的图形,如散点图、柱状图、饼图等。不同类型的图形需要使用不同的函数进行绘制,具体使用方法可以参考官方文档。 以上是matplotlib.pyplot的一些基本使用方法,对于更复杂的绘图需求,可以通过查阅文档等方式进一步学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值