python绘制风场方向和大小quiver问题

 更新时间:2023年08月16日 10:55:51   作者:小朱小朱绝不服输  
这篇文章主要介绍了python绘制风场方向和大小quiver问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

最近需要根据再分析资料的U风和V风分析背景场的风场走向和大小,需要在地图上绘制风场箭头。

先看一下结果:

长度代表风速大小,箭头指向代表风向。绘制的经纬度区间由计算的经纬度数组决定。

一、python调用quiver绘制风场箭头

风场主要是用箭头表示风的方向和大小,python中调用的方法为:

Axes.quiver(*args, data=None, **kw)

调用quivers的形式:

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

X、Y是箭头的位置,U、V是箭头数据(data),C是箭头的颜色。

如果X、Y不存在(absent),他们将作为均匀网格被生成。

默认设置会自动将箭头的长度缩放到合理的大小。要改变箭头的长度请参看 scale 和scale_units两个关键字参数。

quiver函数的参数:

X: 1D or 2D array, sequence, optional 1维或2维数组,序列(sequence),可自选(optional),箭头位置的x坐标
Y: 1D or 2D array, sequence, optional 1维或2维数组,序列,可自选,箭头位置的y坐标
U: 1D or 2D array or masked array, sequence 1维或2维数组或掩码数组(参看masked array https://blog.csdn.net/liukai2918/article/details/78419302),序列,箭头矢量的x分量
V: 1D or 2D array or masked array, sequence 1维或2维数组或掩码数组,序列,箭头矢量的y分量
C: 1D or 2D array, sequence, optional 1维或2维数组,序列(sequence),可自选,箭头颜色
units(单位): [ 'width' | 'height' | 'dots' | 'inches' | 'x' | 'y' | 'xy' ]
   箭头尺寸(除长度外)以此单位的倍数计算——即是说选定单位后,箭头尺寸即是此单位的倍数
   ‘width'或'height':轴(axis)的宽度或高度
   ‘dots'或'inches':像素或英寸,基于图的dpi
   ‘x', ‘y'或‘xy':分别是X、Y或X2+Y2的数据单位(data units)
   箭头依单位不同而不同。对于'x'或'y',箭头会随着其一的增大(zoom in)而增大;对于其他单位,箭头的大小与缩放状态(zoom state)无关。对于'width'或'height',当窗口重置时,箭头的大小会随着轴(axes)的宽度和高度的增大而增大;低于同意'dots'或'inches'。重置不会改变箭头。
angles: [‘uv' | ‘xy'], array, 可自选
   用于决定箭头角度的方法,默认是'uv'
   ‘uv':箭头的纵横比(axis aspect ratio)为1,所以若U*==*V,则绘图上箭头的方向与水平轴逆时针呈45度(正向右)。
   ‘xy': 箭头从(x,y)指向(x + u,y + v)。例如,使用它来绘制渐变场(gradient field)。
   或者,可以将任意角度指定为以水平轴逆时针方向的度数值的数组。
   注意:反转数据轴将相应地仅使用angles='xy'反转箭头。
scale : None, float, optional
   每个箭头长度单位的数据单位数量,例如,每个绘图宽度m / s;参数scale越小箭头越长。默认是None
   若是None,一个简单的自动缩放算法将被采用,基于平均矢量长度和适量的数量。箭头长度单位由scale_units参数给出。
width : scalar(标量), optional
   箭杆(shaft)的宽度,以箭头单位衡量。默认是由以上单位的选择和矢量数量来决定。常用的初始值是0.005倍的画的宽度(width of the plot)
headwidth : scalar, optional 头部宽度相对于箭杆宽度的倍数,默认是3倍
headlength : scalar, optional 轴交叉处的头部长度,默认是4.5

matplotlib绘制图像的官方网站介绍

二、python在地图上绘制风场

1. 数据准备

quiver(X, Y, U, V, C, **kw)
  • X:经度,这里使用一维数组
  • Y:纬度,这里使用一维数组
  • U:U风,根据经纬度从数据集中提取的U风,一维数组
  • V:V风,根据经纬度从数据集中提取的V风,一维数组
  • C:颜色,随便设置

width:0.005

scale:200 设置箭头比例,可以自行调节尝试

headwidth:2

m.quiver(x, y, u_wind, v_wind, color='deepskyblue', width=0.005, scale=200, headwidth=2)

经纬度设置:

# 用两个列表存储研究区域的经纬度,这里取正负5°的区间。
lonlist = []
latlist = []
for k in np.linspace(appro_lat - 5, appro_lat + 5, 21):
    for i in np.linspace(appro_lon - 5, appro_lon + 5, 21):
        lonlist.append(i)
        latlist.append(k)

U,V风提取:

u_wind = []
v_wind = []
for i in range(len(lonlist)):
    u_wind.append(nc_obj.variables['u10'][time_index][latitude.index(latlist[i])][longitude.index(lonlist[i])])
    v_wind.append(nc_obj.variables['v10'][time_index][latitude.index(latlist[i])][longitude.index(lonlist[i])])

这里都是用一维数组表示,具体的情况将根据自己的需要设置。

2. 在地图上绘制风场箭头

fig = plt.figure(figsize=(8, 6))
m = Basemap(projection='cyl', llcrnrlat=min(latlist), llcrnrlon=min(lonlist), urcrnrlat=max(latlist),
            urcrnrlon=max(lonlist))  # 使用Basemap获取地图
# 通过readshapefile读取地图文件shp
m.readshapefile(CN_pro', 'states')  // 根据自己的需要readshapefile读取地图文件
m.drawcoastlines(color='black')
m.drawstates(color='black')
m.drawcountries(color='black')
x, y = m(*(lonlist, latlist))  # 将lats / lons转换为地图投影坐标
m.drawmeridians(np.arange(math.ceil(min(lonlist)), int(max(lonlist)), 5), labels=[0, 0, 0, 1])
m.drawparallels(np.arange(math.ceil(min(latlist)), int(max(latlist)), 5), labels=[1, 0, 0, 0])
# 在地图上绘制BestTrack的经纬度
best_lon, best_lat = m(lon[t], lat[t])
# 在地图上绘制点
m.plot(best_lon, best_lat, 'o', color='red', ms=5)
# 绘制风场箭头
m.quiver(x, y, u_wind, v_wind, color='deepskyblue', width=0.005, scale=200, headwidth=2)
plt.show()

需要在地图上绘制卫星云图亮温值请参考:python绘制登陆时的卫星云图(TBB)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python配置grpc环境

    python配置grpc环境

    gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等),本篇只介绍 Python 的 gRPC 安装使用
    2019-01-01
  • Pandas实现解析JSON数据与导出的示例详解

    Pandas实现解析JSON数据与导出的示例详解

    其实使用pandas解析JSON Dataset要方便得多,所以这篇文章主要为大家介绍了Pandas实现解析JSON数据与导出的具体方法,需要的小伙伴可以收藏一下
    2023-07-07
  • Python通过30秒就能学会的漂亮短程序代码(过程全解)

    Python通过30秒就能学会的漂亮短程序代码(过程全解)

    这篇文章主要介绍了Python之30秒就能学会的漂亮短程序代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Python AutoCAD 系统设置的实现方法

    Python AutoCAD 系统设置的实现方法

    这篇文章主要介绍了Python AutoCAD 系统设置的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • ansible-playbook实现自动部署KVM及安装python3的详细教程

    ansible-playbook实现自动部署KVM及安装python3的详细教程

    这篇文章主要介绍了ansible-playbook实现自动部署KVM及安装python3的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Python3导入CSV文件的实例(跟Python2有些许的不同)

    Python3导入CSV文件的实例(跟Python2有些许的不同)

    今天小编就为大家分享一篇Python3导入CSV文件的实例(跟Python2有些许的不同),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python中的测试模块unittest和doctest的使用教程

    Python中的测试模块unittest和doctest的使用教程

    这篇文章主要介绍了Python中的测试模块unittest和doctest的使用教程,本文来自于IBM官方网站技术文档,需要的朋友可以参考下
    2015-04-04
  • python使用pygame实现笑脸乒乓球弹珠球游戏

    python使用pygame实现笑脸乒乓球弹珠球游戏

    这篇文章主要为大家详细介绍了python使用pygame实现笑脸乒乓球弹珠球游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 详解Python如何利用pdfplumber提取PDF中的表格

    详解Python如何利用pdfplumber提取PDF中的表格

    pdfplumber 是一个开源的 python 工具库 ,它可以轻松的获取 PDF 文本内容、标题、表格、尺寸等各种信息,今天来介绍如何使用它来提取 PDF 中的表格,文中通过代码和图片讲解的非常详细,需要的朋友可以参考下
    2024-04-04
  • 如何理解python对象

    如何理解python对象

    在本篇文章里小编给大家分享的是一篇关于python对象的理解相关内容,有兴趣的朋友们可以学习下。
    2020-06-06

最新评论