Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >quiver函数绘图详解【一】

quiver函数绘图详解【一】

作者头像
自学气象人
发布于 2023-01-12 09:55:23
发布于 2023-01-12 09:55:23
2K02
代码可运行
举报
文章被收录于专栏:自学气象人自学气象人
运行总次数:2
代码可运行

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 类参数。

示例

说的再多都没有图形看的直观。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

可以看出上图矢量箭头比较密集,下面可以仅选取数组的一部分来绘制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

可以看出箭头的密度变小了,如果放大看的话,箭头并不是三角形的,下面设置为三角形看看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

由放大后的图可以看出箭头已经变为三角形了

再试试其它参数看看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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倍。与上图相比,箭头变大了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 参数是不需要设置的。

如果想让箭头变尖一些呢

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

也可以这样做来达到上面的效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 呢

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 同样可以得到上图的矢量箭头==

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 自学气象人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
pycharm使用matplotlib绘图学习笔记「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/174663.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
5670
Python中的3D绘图命令~放到论文或PPT里太加分了
比如在下面的几张动图中,使用matplotlib中的三维显示命令,使得我们可以对于logistic回归网络的性能与相关参数有了更好的理解。
润森
2022/09/22
9320
Python中的3D绘图命令~放到论文或PPT里太加分了
送你16个matplotlib绘图实用小技巧(附代码)
有时候显示日期会重叠在一起,非常不友好,调用plt.gcf().autofmt_xdate(),将自动调整角度
数据派THU
2020/04/14
5900
送你16个matplotlib绘图实用小技巧(附代码)
python matplotlib各种绘图类型完整总结
plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)
Twcat_tree
2022/12/05
6.2K0
python matplotlib各种绘图类型完整总结
Python基础绘图教程(二)
本期的介绍就到这里了,文中代码可以横向滑动浏览,为方便实操,相关的代码和样例存已存放至百度网盘,链接: https://pan.baidu.com/s/1uSGDqbeCAh1ZS-dz-zs5tA 提取码: 8n9x,读者朋友们可以前往下载学习。
郭好奇同学
2020/10/15
8730
python实现之多元函数作图
多元函数的本质是一种关系,是两个集合间一种确定的对应关系。多元函数是后续人工智能的基础,先可视化呈现,后续再学习一下求导。
python与大数据分析
2022/03/11
1.2K0
python实现之多元函数作图
「Python」matplotlib备忘
总结了一下网上现有的资源,得到了一些东西。随手做个备忘。 更多设置见:https://matplotlib.org/users/customizing.html。
py3study
2020/01/19
7390
「Python」matplotlib备忘
【中秋节快乐】Matplotlib:3d绘图合集
https://blog.csdn.net/m0_63834988/category_12441299.html
Qomolangma
2024/07/30
2820
【中秋节快乐】Matplotlib:3d绘图合集
Python3快速入门(十六)——Mat
Matplotlib是 Python 2D-绘图领域使用最广泛的套件,可以简易地将数据图形化,并且提供多样化的输出格式。 matplotlib有两个接口,一个是状态机层的接口,通过pyplot模块来进行管理;一个是面向对象的接口,通过pylab模块将所有的功能函数全部导入其单独的命名空间内。
py3study
2020/01/03
1.5K0
Matplotlib的箭头绘制(1)——基本标注
在PCA深入探究一节中,提及了箭头的绘制。有的朋友私信希望详细说一下箭头的绘制方法,特此单列一节举例说明matplotlib中箭头的绘制语法。准备好,开始发车!!
python数据可视化之路
2023/02/23
2.7K0
Matplotlib的箭头绘制(1)——基本标注
Python基础(十二) | 还不会python绘图?两万字博文教你Matplotlib库(超详细总结)
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot
timerring
2022/10/08
2.6K0
Python基础(十二) | 还不会python绘图?两万字博文教你Matplotlib库(超详细总结)
Matplotlib可视化Pyplot Tutorial
MATLAB, and pyplot, have the concept of the current figure and the current axes. All plotting commands apply to the current axes. The function gca() returns the current axes (a matplotlib.axes.Axes instance), and gcf() returns the current figure (matplotlib.figure.Figure instance).
用户2183996
2018/06/28
6800
Matplotlib 绘3D图
Matplotlib 也可以绘制 3D 图像,与二维图像不同的是,绘制三维图像主要通过 mplot3d 模块实现。但是,使用 Matplotlib 绘制三维图像实际上是在二维画布上展示,所以一般绘制三维图像时,同样需要载入 pyplot 模块。 mplot3d 模块下主要包含 4 个大类,分别是: mpl_toolkits.mplot3d.axes3d() mpl_toolkits.mplot3d.axis3d() mpl_toolkits.mplot3d.art3d() mpl_toolkits.mpl
听城
2018/04/27
1.2K0
用python给女朋友表白_python绘制太阳花
———————————————— 参考文章 https://blog.csdn.net/weixin_43387647/article/details/88973568
全栈程序员站长
2022/09/27
3880
【python图像处理】python绘制
3D图形在数据分析、数据建模、图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何使用python进行3D图形的绘制,包括3D散点、3D表面、3D轮廓、3D直线(曲线)以及3D文字等的绘制。
py3study
2020/01/10
1.7K0
【python图像处理】python绘制
带你十分钟快速入门画图神器 Matplotlib
在开始正式介绍 Matplotlib 用法之前,先来简单了解下 Matplotlib。
abs_zero
2018/09/25
1.2K0
带你十分钟快速入门画图神器 Matplotlib
使用 Matplotlib 在 Python 中进行三维绘图
3D 图是可视化具有三个维度的数据(例如具有两个因变量和一个自变量的数据)的非常重要的工具。通过在 3D 图中绘制数据,我们可以更深入地了解具有三个变量的数据。我们可以使用各种 matplotlib 库函数来绘制 3D 绘图。
用户1418987
2023/10/26
4.2K0
使用 Matplotlib 在 Python 中进行三维绘图
matplotlib 3D 绘图(一)
一、3D 曲线图 代码如下: import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D import numpy as np i
用户6021899
2019/08/14
6580
快速入门Matplotlib教程
Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。这里将会探索 matplotlib 的常见用法。
Python数据科学
2018/08/06
9590
快速入门Matplotlib教程
Python数据分析Matplotlib
1.2 使用matplotlib.pyplot中的annotate()函数标注文字
荣仔_最靓的仔
2021/02/02
3.7K0
Python数据分析Matplotlib
相关推荐
pycharm使用matplotlib绘图学习笔记「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验