python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python箭头向量图

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

作者:微小冷

箭头向量图十分常见,比如天气预报在显示风场的时候,就会贴心地用箭头指明风的方向,下面就跟随小编一起学习一下如何利用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箭头向量图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文