最近在计算波作用通量,正好就画到了矢量箭头图,画的过程中发现还是有很多细节需要注意的,那就直接进入正题吧。

首先,矢量箭头图是分为两种的,一种类似我们常见的风场(左图),另一种则是特殊的流场,也就是流线图(右图),这两张都是画的Plumb通量,显然对于波通量来说还是箭头好一些。

矢量箭头

对于左图和右图来说分别使用的画图函数为:

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

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

我整理了相应的参数:

1. quiver

X: 数组,

为X坐标,通常为我们的经度lon

Y:

为Y坐标,通常为我们的纬度lat

U:

纬向风分量,二维数组

V:

经向风分量,二维数组

C:

箭头颜色数组,可为一种颜色,也可为颜色数组

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)的宽度和高度的增大而增大

angles: [‘uv’ | ‘xy’]

用于决定箭头角度的方法,默认是’uv’

‘uv’:箭头的纵横比(axis aspect ratio)为1,所以若U==V,则绘图上箭头的方向与水平轴逆时针呈45度(正向右)。

‘xy’: 箭头从(x,y)指向(x + u,y + v)。例如,使用它来绘制渐变场(gradient field)。

或者,可以将任意角度指定为以水平轴逆时针方向的度数值的数组。

注意:反转数据轴将相应地仅使用angles='xy'反转箭头。

scale :

每个箭头长度单位的数据单位数量,例如,每个绘图宽度m / s;参数scale越小箭头越长。默认是None

若是None,一个简单的自动缩放算法将被采用,基于平均矢量长度和适量的数量。箭头长度单位由scale_units参数给出。

scale_units : [ 'width' | 'height' | 'dots' | 'inches' | 'x' | 'y' | 'xy' ]

如果关键字参数scale是None,那么箭头长度单位默认是None

例如:scale_units是’inches’,scale是2.0,(u,v)=(1,0),那么矢量将会是0.5英寸长。

如果scale_units是’width/height’,那么矢量长度是轴’width/height’的半长

如果scale_units是’x’那么矢量是x轴单位的0.5倍。要在x-y平面上画矢量,使得u和v与x和y有相同的单位,则应另angles=’xy’, scale_units’xy’, scale=1.

width : scalar(标量), optional

箭头杆(shaft)的宽度,以箭头单位衡量。常用的初始值是0.005倍的画的宽度

headwidth :

头部宽度相对于箭杆宽度的倍数,默认是3倍

headlength :

轴交叉处的头部长度,默认是4.5

minshaft :

箭头比例的长度,以头部长度为单位。

minlength :

最小长度为轴宽的倍数;如果箭头长度小于此值,则绘制该直径的点(六边形)。

pivot : [ 'tail' | 'mid' | 'middle' | 'tip' ], optional

箭头的基点,比如说选择mid,那个箭头中间位置就是所在坐标点位置。

老实说,关于units,scale,和scale_units的设置十分复杂,画图时可先均不设置,看看默认效果,然后逐渐调整。通常只调整scale即可,另外两项除非必要,均可不设置。

2. streamplot

略过相同部分

density : float

控制流线的闭合度。当密度为1时,将域划分为30x30网格。密度线性缩放此网格。网格中的每个单元格最多只能有一条横贯流线。对于每个方向上的不同密度,使用一个元组(密度x,密度y)。

linewidth : float or 2D array

流线的宽度。使用二维数组,可以在网格上改变线宽。数组的形状必须与u和v相同。

color:matplotlib颜色代码或二维数组

流线型的颜色。如果给定一个数组,则使用cmap和norm将其值转换为颜色。数组的形状必须与u和v相同。

cmap:颜色映射

用于绘制流线和箭头的彩色地图。这只在颜色是数组时使用。

norm:

规格化用于将亮度数据缩放到0,1的对象。如果没有,则拉伸(最小,最大)到(0,1)。这只在颜色是数组时使用。

arrowsize:float

箭头大小的比例因子。

minlength:浮动

轴线坐标中流线的最小长度。

start_points :

数据坐标中流线起点的坐标(与x和y数组的坐标相同)。

maxlength:浮点

轴线坐标中流线的最大长度。

integration_direction:{'forward','backward','both'}

将流线向前、向后或双向整合。默认值为“both”。

以上便是常用参数,仍有一些参数是可以使用的,比如说zorder(图层顺序),transform(坐标转换)等等。需要注意的是,当我们在地图投影上叠加风场时,需要设置transform=ccrs.PlateCarree() 来将坐标转换为圆柱地图投影坐标,该参数调用了cartopy库的函数,具体使用可参考我先前发布的文章,有关于地图投影的详细描写。

那么,再回到我们最开始展示的那张图,我给出该图的部分代码以供参考。

#以下四行为地图投影以及坐标轴的设置,具体参考先前发布的文章

proj = ccrs.PlateCarree(central_longitude=50)

leftlon, rightlon, lowerlat, upperlat = (0,180,0,90)

img_extent = [leftlon, rightlon, lowerlat, upperlat]

lon_formatter = cticker.LongitudeFormatter()

lat_formatter = cticker.LatitudeFormatter()

#创建画布

fig7 = plt.figure(figsize=(12,8))

#创建地图投影子图

f7_ax1 = fig7.add_axes([0.1, 0.1, 0.6, 0.6],projection = proj)

#地图相关设置,包括边界,河流,海岸线,坐标的经纬度显示

f7_ax1.set_extent([leftlon, rightlon, lowerlat, upperlat], crs=ccrs.PlateCarree())

f7_ax1.add_feature(cfeature.COASTLINE.with_scale('50m'))

f7_ax1.add_feature(cfeature.LAKES, alpha=0.5)

f7_ax1.set_xticks(np.arange(leftlon,rightlon+10,10), crs=ccrs.PlateCarree())

f7_ax1.set_yticks(np.arange(lowerlat,upperlat+10,10), crs=ccrs.PlateCarree())

f7_ax1.xaxis.set_major_formatter(lon_formatter)

f7_ax1.yaxis.set_major_formatter(lat_formatter)

f7_ax1.set_title('(a) quiver',loc='left')

#因为是波作用通量,首先画扰动流函数

cf=f7_ax1.contourf(lon,lat,streamf_mean/1e5,cmap='RdBu_r',extend='both',levels=np.arange(-16,18,2),transform=ccrs.PlateCarree())

c=f7_ax1.contour(lon,lat,streamf_mean/1e5,colors='black',linewidths=0.5,levels=np.arange(-16,18,2),transform=ccrs.PlateCarree())

#画矢量箭头核心代码在这里,::2表示每隔2个点画箭头,不然会太密集,记得在投影坐标上画时一定要设置transform

Q = f7_ax1.quiver(lon[::2], lat[::2], px_mean[::2,::2], py_mean[::2,::2],pivot='mid',width=0.0018,scale=10,headwidth=4,transform=ccrs.PlateCarree())

#添加色标

position=fig7.add_axes([0.57, 0.08, 0.35, 0.025])

fig7.colorbar(cf,cax=position,orientation='horizontal',format='%d',)

右半图的代码就不展示了,唯一区别就是quiver变成了streamplot,我没有过多修改。

python气象绘图速成_Python气象数据处理与绘图(11):矢量箭头图(风场,通量场)相关推荐

  1. python气象绘图速成_Python气象绘图Day-By-Day

    登录后查看更多精彩内容~ 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 edwardli 于 2017-6-13 10:02 编辑 工作繁事多,先上结果供交流,回头不断细化. 我 ...

  2. python气象绘图速成_Python气象绘图教程(十六)—Cartopy_6

    本节提要:使用cartopy进行市县的色块填色.模仿geopandas绘制颜色图 一.利用cartopy进行市县的色块填色 其实geopandas在这方面比cartopy更加专业,由于是基于panda ...

  3. python处理wrf气象数据_Python气象数据处理与绘图(11):矢量箭头图(风场,通量场)...

    最近在计算波作用通量,正好就画到了矢量箭头图,画的过程中发现还是有很多细节需要注意的,那就直接进入正题吧. 首先,矢量箭头图是分为两种的,一种类似我们常见的风场(左图),另一种则是特殊的流场,也就是流 ...

  4. python画图怎么调色_Python气象数据处理与绘图(19):如何使用NCL色板(调色盘思路相同)...

    一. 使用NCL色板(使用调色盘文件思路相同) NCL的色板十分丰富,几乎可以涵盖平常所需.详见:传送门 那么我们能否将NCL的色板用在python中呢?答案当然是可以的. 我在气象家园发现了个帖子, ...

  5. Python 柱状图 横坐标 名字_Python气象绘图教程(四)

    本节提要:回顾复习,新的调整命令. 一.回顾复习 前面讲到Python库包的下载与安装,推荐使用conda命令进行安装,通过conda list查看当前已经安装好的库包及版本. 画图步骤:①impor ...

  6. python 3d绘图库_python – 用于科学3d绘图的Mayavi的替代品

    在没有令人满意的第一个答案和无法解释的downvote之后编辑: 我需要绘制一个在3D网格中构造的标量字段,如下所示: import numpy as np from mayavi import ml ...

  7. python三维图形注释_Python数据分析注释matplolib绘图注释和示例,笔记,及

    先记录小技巧: pycharm中,鼠标点在一个方法上,ctrl+b,即转到该方法的源码,以找到使用方法. 概念及环境 使用意义 :从一堆数据中找到或总结出需要的信息,帮助判断和决策 与web.爬虫.机 ...

  8. python三天速成_python学习第三天

    append和extend的区别 extend可以将另一个集合中的元素逐一添加到列表中 append向列表添加元素,将元素整体添加进去列表 append添加的注意事项 a=a.append(b)画蛇添 ...

  9. python人文社科研究_Python高级数据处理与可视化(五)---- Python的理工类应用 Python人文社科类应用...

    6. Python的理工类应用 6.1 简单的三角函数计算 np.sin(x) 6.2 一组数据的傅立叶变换 #-*- coding: utf-8 -*- """Crea ...

最新文章

  1. 网页(Webpage)粒度分析算法
  2. Android软键盘调用及隐藏,以及获得点击软键盘输入的字母信息
  3. BootstrapValidator验证
  4. JS Compress and Decompress
  5. 推荐系统图算法实用干货汇总(含论文、代码、样例教程)
  6. Axiom3D:Ogre射线与点,线,面相交,鼠标操作3维空间.
  7. ORB_SLAM : semi dense code
  8. gitd mysql_MySQL GTID (一)
  9. mysql 未发现数据源名称并且未指定默认驱动程序_SQLSERVER 链接 MYSQL 的 两种方法 及 未发现数据源名称并且未指定默认驱动程序 处理办法...
  10. 极客大学架构师训练营--食堂就餐系统架构设计⽂档 -- 第一次作业
  11. jQuery 文档碎片处理
  12. 高斯09linux教程,Gaussian 09的安装与使用
  13. Redis 实战案例总结
  14. 2022年忍者必须死3到达无双纪念
  15. mapping文件的编写
  16. CTOlib码库介绍(GitHub热门项目收录网站)
  17. Flask前后端分离02
  18. 0001-Flink安装---Flink安装(Standlone模式)
  19. ZYNQ7000系列入门之GPIO点灯
  20. 编程的本质(极客时间 | 陈皓《左耳听风:编程范式游记》系列的其中一篇)

热门文章

  1. 论文审稿怎么审?审稿意见怎么写?(含案例)
  2. [ITIL]-ITIL4架构
  3. (基于Packet Tracer 的校园网络设计方案(计算机网络与课程实验)(三)——Run Time 观察报文传输过程
  4. VS2008 MFC类库精讲:使用MFC V9.0类库及新版Office Fluent UI实现CAD系统
  5. 如何去掉PDF的密码?这几个方法轻松搞定
  6. Mac上如何安装Mysql5以及可视化工具navicat
  7. 第一个用pr和au制作出的作品
  8. 使用TensorFlow的卷积神经网络识别手写数字(3)-识别篇
  9. 【CSDN竞赛第25期】赢热门图书《千脑智能》和定制周边
  10. ubuntu18.04安装无线网卡驱动安装心得(解决无法在线下载驱动问题)