Python绘制箭头向量图的示例代码

 更新时间:2023年08月07日 09:43:59   作者:微小冷  
箭头向量图十分常见,比如天气预报在显示风场的时候,就会贴心地用箭头指明风的方向,下面就跟随小编一起学习一下如何利用Python绘制箭头向量图吧

简介

箭头向量图十分常见,比如天气预报在显示风场的时候,就会贴心地用箭头指明风的方向。在matplotlib中,用 quiver 函数来绘制箭头向量图,示例如下

import matplotlib.pyplot as plt
import numpy as np
X = np.arange(-2, 2, 0.2)
Y = np.arange(-1, 1, 0.2)
U, V = np.meshgrid(X, Y)
fig = plt.figure(figsize=(6,3))
plt.quiver(X, Y, U, V)
plt.tight_layout()
plt.show()

这个图需要4组变量,分别是X,Y,U,V,其中X,Y可以理解为坐标起点,U,V则是向量在X和Y方向的强度。

这个绘图函数虽然简洁,但其实有个问题,即X和Y都是一维数组,而在绘制quiver的时候,却自转换成了二维数组,否则图像上不可能有这么多的点,更不能和U,V一一对应,可见在quiver图中,U,V参数显然更重要一些。实际上也是如此,如果省略X,Y参数,那么得到的图像将建立自然计数坐标系,

fig = plt.figure(figsize=(6,3))
plt.quiver(U, V)
plt.tight_layout()
plt.show()

箭头设置

箭头向量图的特点几乎都在箭头这了,如果没有箭头,那quiver和散点图也就没什么区别了。quiver函数可以定制箭头的线宽、头宽、头长等信息,具体参数如下图所示

在具体设置时,length通过U,V参数指定,width为绝对的宽度,一般比较小,剩下三个参数均是width的倍数,是相对值。

另外,如果想给quiver图上色,需要设置C后者color参数。

具体示例如下

C = np.sqrt(U**2+V**2)
style = dict(width=0.005, headwidth=8, headlength=6, headaxislength=4)
fig = plt.figure(figsize=(6,3))
plt.quiver(X, Y, U, V, C, **style)
plt.tight_layout()
plt.show()

绘图结果如下

三维场图

quiver函数只需添加一个三维坐标就可以无缝体验三维场图。下面假设空间中有三颗恒星,那么用场图来表示这三颗恒星附近的引力指向。

万有引力公式F=Gmm/r2​,简单起见,让三颗恒星的质量都是1, G也取1,则其个方向分量可表示为

x, y, z = np.indices([5,5,5])/5
stars = np.random.rand(3, 3).reshape(-1,3)
u = v = w = 0   # 表示引力
for xi, yi, zi in stars:
    dx, dy, dz = xi-x, yi-y, zi-z
    dr = np.sqrt(dx**2+dy**2+dz**2)
    u += dx/dr**3
    v += dy/dr**3
    w += dz/dr**3
F = u**2 + v**2 + w**2
ax = plt.subplot(projection='3d')
ax.scatter(*stars.T, c='r')
style = dict(width=0.005, headwidth=8, headlength=6, headaxislength=4)
ax.quiver(x, y, z, u, v, w, length=0.1, normalize=True)
plt.tight_layout()
plt.show()

结果如下

到此这篇关于Python绘制箭头向量图的示例代码的文章就介绍到这了,更多相关Python箭头向量图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytorch交叉熵损失函数的weight参数的使用

    pytorch交叉熵损失函数的weight参数的使用

    这篇文章主要介绍了pytorch交叉熵损失函数的weight参数的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python实现vlog生成器的示例代码

    Python实现vlog生成器的示例代码

    vlog,全称为Video blog,意为影音博客,也有翻译为微录。本文将尝试用Python基于Moviepy从一个文本文件中自动生成一个视频格式的vlog,感兴趣的可以了解一下
    2023-01-01
  • 部署Django到阿里云服务器教程示例

    部署Django到阿里云服务器教程示例

    这篇文章主要介绍了部署Django到阿里云服务器教程示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • python画微信表情符的实例代码

    python画微信表情符的实例代码

    这篇文章主要介绍了python画微信表情的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • python中stdout输出不缓存的设置方法

    python中stdout输出不缓存的设置方法

    这篇文章主要介绍了python中stdout输出不缓存的设置方法,这个方法只在比较特殊的环境中使用,需要的朋友可以参考下
    2014-05-05
  • 使用Python获取网段IP个数以及地址清单的方法

    使用Python获取网段IP个数以及地址清单的方法

    今天小编就为大家分享一篇使用Python获取网段IP个数以及地址清单的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python重复值处理得方法

    python重复值处理得方法

    这篇文章主要介绍了python重复值处理得方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • python爬虫开发之Request模块从安装到详细使用方法与实例全解

    python爬虫开发之Request模块从安装到详细使用方法与实例全解

    这篇文章主要介绍了python爬虫开发之Request模块从安装到详细使用方法与实例全解,需要的朋友可以参考下
    2020-03-03
  • Python使用pymysql小技巧

    Python使用pymysql小技巧

    pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。但目前pymysql支持python3.x而后者不支持3.x版本。
    2017-06-06
  • python实现二分查找算法

    python实现二分查找算法

    这篇文章主要介绍了python如何实现二分查找算法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下。
    2020-09-09

最新评论