如果想用风羽画风场,请看另一篇python画风羽及风羽定义

目录

用像素点坐标画图

用经纬度坐标画图(推荐)



PS:三维箭头可参考:

https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#quiver

另有Stack Overflow上的问题可能有帮助:https://stackoverflow.com/questions/7130474/3d-vector-field-in-matplotlib


https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.quiver

上面是官方文档的链接

用像素点坐标画图

箭头关键的一个参数是长度,长度可以通过参数scale来设置,如果你多次使用quiver(),只要保证参数scale一致,那么箭头长度就会与风速的值成正比,可按照下面我贴出的代码那样设置参数。建议scale设置成30-50,100之内也都还可以。箭头宽度可以通过width=0.005开始设置。箭头颜色可以通过传入颜色列表来控制。

Axes.quiver(*argsdata=None**kw)

用于画二维的箭头

调用quivers有以下几种形式(signatures):

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

U、V是箭头数据(data),X、Y是箭头的位置,C是箭头的颜色。这些参数可以是一维或二维的数组或序列。

如果X、Y不存在(absent),他们将作为均匀网格被生成。如果U和V是2维的数组,X和Y是1维数组,并且len(X)和len(Y)与U的列(column)和行(row)纬度相匹配(match),那么X和Y将使用numpy.meshgrid()——用于产生一个矩阵,具体可参考:meshgrid使用方法——进行扩展。

默认设置会自动将箭头的长度缩放到合理的大小。要改变箭头的长度请参看 scale 和scale_units两个关键字参数(kwargs:关键字参数,参看文章最后有关键字参数与可变参数的区别)

默认值给出一个稍微后掠(swept-back)的箭头;若要使箭头头部呈三角状,则要确保headaxislength与headlength相同。若要使箭头更尖锐(more pointed),则应减小headwidth或者增大headlength和headaxislength。若要使箭头头部相对于箭杆(shaft)更小一些,则应将所有头部参数都减小(scale down)。你最好不要单独留下minshaft(You will probably do best to leave minshaft alone.)

线宽和边缘颜色可以用于自定义箭头轮廓(outlines)。

参数

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参数给出。

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

如果关键字参数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倍的画的宽度(width of the plot)

headwidth : scalar, optional

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

headlength : scalar, optional

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

minshaft : scalar, optional

箭头比例的长度,以头部长度为单位。不要将其设置为小于1,否则小箭头看起来会很糟糕

minlength : scalar, optional

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

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

箭头在网格点上的部分;箭头围绕这一点旋转,因此称为枢轴。

color : [ color | color sequence ], optional

这是PolyCollection facecolor kwarg的同义词。如果设置了C,颜色就没有效果。

quiver(*args, **kw)
import matplotlib.pyplot as plt
import math
from mpl_toolkits.basemap import Basemap
from pylab import *
import numpy as npmpl.rcParams['font.sans-serif'] = ['SimHei']for i in range(1,3):plt.subplot(2, 1, i)ax = plt.gca()wind = [x for x in range(1,9)]# angle = [45*x for x in range(0,8)]# lon = list(np.linspace(113.8, 114.6, 8))lat = list(np.linspace(22.4, 22.85, 8))# wind = [2]*8angle = [90]*8 # 为方便比较长度,箭头方向设置成一样lon = [114.27] * 8 # 为方便比较长度,箭头经度设置成一样# 指定地图范围、投影方式(projection)等  area_thresh是与湖泊等在地图上显示相关的参数m = Basemap(llcrnrlon=113.7, llcrnrlat=22.35, urcrnrlon=114.7, urcrnrlat=22.9,\rsphere=(6378137.00,6356752.3142),\resolution='l', area_thresh=1000., projection='lcc', lat_1=22.5, lat_0=22.5, lon_0=114,ax=ax)lon, lat = m(*(lon, lat))# 一系列的U、Vver = [-spd*math.sin(math.radians(agl)) for spd,agl in zip(wind, angle)] # U分量hriz = [-spd*math.cos(math.radians(agl)) for spd,agl in zip(wind, angle)] # V分量print(ver, '\n', hriz)ax=plt.gca()#下面两行是读取地图中的shape文件,即轮廓图# m.readshapefile(r'G:\深圳季风研究\gadm36_HKG_shp\gadm36_HKG_0', 'states',color='grey') #HongKong# # m.readshapefile(r'G:\深圳季风研究\gadm36_CHN_shp\gadm36_CHN_3', 'states',color='grey') #Mainland in given lon and lat# m.readshapefile(r'G:\深圳季风研究\gadm36_sz_shp\Bon_data\xzq_sz_pop', 'states', color='grey')m.scatter(lon, lat, s=2, color='goldenrod', marker="o") #根据经纬度,画出对应站点位置ax.set_title('风场')# ax.quiver(lon, lat, ver, hriz, units='width', scale=2, width=0.01, color='deepskyblue')ax.quiver(lon, lat, ver, hriz, color='deepskyblue', width=0.005, scale=30)for i, wspd in enumerate(wind):ax.annotate(str(wspd), (lon[i], lat[i]))# 在图上添加一些文字信息plt.text(0.6,0.9, r'$mean: $'+str(18) + '°', color='forestgreen',transform=ax.transAxes, fontweight='extra bold')plt.text(1.02,0.6, r'$S: $' + str(18) + '%', color='forestgreen',transform=ax.transAxes, fontweight='heavy')plt.text(1.02,0.4, r'$N: $', color='forestgreen',transform=ax.transAxes, fontweight=100)# 画经纬度网格m.drawmeridians([114.0,114.4], labels=[1,0,0,1]) # meridian:子午线,经线 arange指明范围和间隔m.drawparallels(np.arange(15, 30, 0.3), labels=[1,0,0,0])  # 画纬度平行线# 比例尺长度的U、V值和位置q_lon, q_lat = m(*(114.27, 22.75))spd = 2angle_all = 90ver_all = -spd*math.sin(math.radians(angle_all))hriz_all = -spd*math.cos(math.radians(angle_all))# ax.quiver(q_lon, q_lat, ver_all, hriz_all, color='g', pivot='mid') # mid是旋转枢纽在中间,默认在尾部ax.quiver(q_lon, q_lat, ver_all, hriz_all, color='g', scale=30)# 画比例尺plt.text(0.82,0.1, r'$scale:$', color='r',transform=ax.transAxes, fontweight=100, fontsize=8)plt.text(0.82,0.03, r'$2m/s$', color='r',transform=ax.transAxes, fontweight=100, fontsize=8)plt.quiver(95000, 3000, 3, hriz_all, color='r', width=0.005, scale=50)print(-ver_all, hriz_all)# 这一段与画箭头不相干,可忽略注释掉  画散点,为不同散点设置不同颜色# Colors=('#DDDDFF','#7D7DFF','#0000C6','#000079','#CEFFCE','#28FF28','#007500','#FFFF93')# sc = plt.scatter(lon, lat, s=100, color=Colors, marker="o") #根据经纬度,画出对应站点位置# for i,txt in enumerate(Colors):#     ax.annotate(txt,(lon[i],lat[i]), fontsize=5)plt.show()

下面是代码运行结果:

未读入shape文件的结果:

读入了shape文件的结果

quiver(*args, **kw)

*args, **kw分别是可变参数和关键字参数,参考此文总结如下:


用经纬度坐标画图(推荐)

下面是和上面相同功能的代码,区别在于前者画图时,将坐标转换成了像素点坐标,而下面的代码则直接传入经纬度坐标(这个方法只对basemap对象有效,使用经纬度坐标时应传参数latlon=True):

import matplotlib.pyplot as plt
import math
from mpl_toolkits.basemap import Basemap
from pylab import *
import numpy as npmpl.rcParams['font.sans-serif'] = ['SimHei']for i in range(1,3):plt.subplot(2, 1, i)ax = plt.gca()wind = [x for x in range(1,9)]# angle = [45*x for x in range(0,8)]# lon = list(np.linspace(113.8, 114.6, 8))lat = list(np.linspace(22.4, 22.85, 8))# wind = [2]*8angle = [90]*8 # 为方便比较长度,箭头方向设置成一样lon = [114.27] * 8 # 为方便比较长度,箭头经度设置成一样# 指定地图范围、投影方式(projection)等  area_thresh是与湖泊等在地图上显示相关的参数m = Basemap(llcrnrlon=113.7, llcrnrlat=22.35, urcrnrlon=114.7, urcrnrlat=22.9,\rsphere=(6378137.00,6356752.3142),\resolution='l', area_thresh=1000., projection='lcc', lat_1=22.5, lat_0=22.5, lon_0=114,ax=ax)# 一系列的U、Vver = [-spd*math.sin(math.radians(agl)) for spd,agl in zip(wind, angle)] # U分量hriz = [-spd*math.cos(math.radians(agl)) for spd,agl in zip(wind, angle)] # V分量print(ver, '\n', hriz)ax=plt.gca()#下面两行是读取地图中的shape文件,即轮廓图# m.readshapefile(r'G:\深圳季风研究\gadm36_HKG_shp\gadm36_HKG_0', 'states',color='grey') #HongKong# # m.readshapefile(r'G:\深圳季风研究\gadm36_CHN_shp\gadm36_CHN_3', 'states',color='grey') #Mainland in given lon and lat# m.readshapefile(r'G:\深圳季风研究\gadm36_sz_shp\Bon_data\xzq_sz_pop', 'states', color='grey')m.scatter(lon, lat, s=2, color='goldenrod', marker="o", latlon=True) #根据经纬度,画出对应站点位置ax.set_title('风场')# ax.quiver(lon, lat, ver, hriz, units='width', scale=2, width=0.01, color='deepskyblue')m.quiver(lon, lat, ver, hriz, color='deepskyblue', width=0.005, scale=30, latlon=True)for i, wspd in enumerate(wind):ax.annotate(str(wspd), (lon[i], lat[i]))# 在图上添加一些文字信息plt.text(0.6,0.9, r'$mean: $'+str(18) + '°', color='forestgreen',transform=ax.transAxes, fontweight='extra bold')plt.text(1.02,0.6, r'$S: $' + str(18) + '%', color='forestgreen',transform=ax.transAxes, fontweight='heavy')plt.text(1.02,0.4, r'$N: $', color='forestgreen',transform=ax.transAxes, fontweight=100)# 画经纬度网格m.drawmeridians([114.0,114.4], labels=[1,0,0,1]) # meridian:子午线,经线 arange指明范围和间隔m.drawparallels(np.arange(15, 30, 0.3), labels=[1,0,0,0])  # 画纬度平行线# 比例尺长度的U、V值和位置spd = 2angle_all = 90ver_all = -spd*math.sin(math.radians(angle_all))hriz_all = -spd*math.cos(math.radians(angle_all))# ax.quiver(q_lon, q_lat, ver_all, hriz_all, color='g', pivot='mid') # mid是旋转枢纽在中间,默认在尾部m.quiver(114.27, 22.75, ver_all, hriz_all, color='g', scale=30, latlon=True)# 画比例尺plt.text(0.82,0.1, r'$scale:$', color='r',transform=ax.transAxes, fontweight=100, fontsize=8)plt.text(0.82,0.03, r'$2m/s$', color='r',transform=ax.transAxes, fontweight=100, fontsize=8)m.quiver(114.62, 22.375, 3, hriz_all, color='r', width=0.005, scale=50, latlon=True)print(-ver_all, hriz_all)# 这一段与画箭头不相干,可忽略注释掉  画散点,为不同散点设置不同颜色# Colors=('#DDDDFF','#7D7DFF','#0000C6','#000079','#CEFFCE','#28FF28','#007500','#FFFF93')# sc = plt.scatter(lon, lat, s=100, color=Colors, marker="o") #根据经纬度,画出对应站点位置# for i,txt in enumerate(Colors):#   ax.annotate(txt,(lon[i],lat[i]), fontsize=5)plt.show()

python matplotlib quiver——画箭头、风场相关推荐

  1. python可视化水平双向箭头_科学网—Python matplotlib quiver—画箭头、风场、量场图 - 张伟的博文...

    用像素点坐标画图 箭头关键的一个参数是长度,长度可以通过参数scale来设置,如果你多次使用quiver(),只要保证参数scale一致,那么箭头长度就会与风速 的值成正比,可按照下面我贴出的代码那样 ...

  2. python画箭头_科学网-Python matplotlib quiver—画箭头、风场、量场图-张伟的博文

    用像素点坐标画图 箭头关键的一个参数是长度,长度可以通过参数scale来设置,如果你多次使用quiver(),只要保证参数scale一致,那么箭头长度就会与风速 的值成正比,可按照下面我贴出的代码那样 ...

  3. python matplotlib模块画出的图像转换为.tiff格式

    利用python matplotlib模块(python3.7.1)画出的图表暂不支持直接导出.tiff格式的图片,但是可以导出eps, pdf, pgf, png, ps, raw, rgba, s ...

  4. [转]python matplotlib contour画等高线图

    python matplotlib contour画等高线图 觉得有用的话,欢迎一起讨论相互学习~ 版权声明:本文为CSDN博主「Mr-Cat伍可猫]博主原创文章,遵循 CC 4.0 BY-SA 版权 ...

  5. python matplotlib contour画等高线图

    函数画图 以z=x2+y2z=x2+y2z=x2+y2z=x2+y2z=x2+y2 z=x^2+y^2z=x2+y2z=x2+y2z=x2+y2z=x2+y2为例 #导入模块 import numpy ...

  6. Python -- Matplotlib:画一条水平线或竖直线

    目录 竖直线 水平线 原文链接 https://blog.csdn.net/math_gao/article/details/109592302 竖直线 # 画出 x=2 这条垂直线 plt.axvl ...

  7. python画箭头表示风速风向_python画风羽及风羽定义

    basemap使用手册:链接:https://pan.baidu.com/s/1CUgQcsuYMbJAdCuij4WsLQ 提取码:aw16 如果想用箭头画风场,请看另一篇python matplo ...

  8. python输出箭头代码_python matplotlib 注释文本箭头简单代码示例

    注释文本箭头 结果展示: 完整代码示例: import numpy as np import matplotlib.pyplot as plt fig,ax = plt.subplots(figsiz ...

  9. Matplotlib 可视化之箭头与标注的高级应用

    时间线是按时间顺序显示的事件列表.它通常是一个图形设计,显示一个长条,标有与之平行的日期,通常是同时期的事件. A_New_Chart_of_History_color 来源:维基百科 时间线可以使用 ...

最新文章

  1. 数字资产云交易所搭建开发平台,云交易的优势在哪?
  2. python移动文件中某个内容_如果python中的某些文件类型,则移动文件并创建目录...
  3. 分布式文件系统之Tfs是什么?
  4. C#using static
  5. [2021-09-09 T3] 序列/luogu P3943 星空(异或差分+bfs最短路+状压dp)
  6. 5G to B核心网建设白皮书发布:2025年运营商toB市场高达6020亿美元
  7. 【鱼眼镜头8】张正友畸变公式;鱼眼的畸变公式需要使用入射角
  8. Nginx-详解其原理
  9. db mysql导入_db mysql导入数据库
  10. 【Windows】WPS | 多级编号 | 自定义多级标号
  11. (每日一练C++)16. 最接近的三数之和
  12. 小微企业内部用服务器应该怎么选择配置
  13. 挑战杯获奖作品_创新筑梦济南大学“挑战杯”获奖作品展示(二)
  14. 微信开放JS SDK,再次给浏览器们上了一课
  15. CNN网络结构发展演变:从LeNet到HRNet(一)
  16. 基于Python改变图片像素大小
  17. oracle中integer最大值,integer表示的最大整数
  18. 国内星载光学卫星详解
  19. Android - 跳转到应用商店进行应用打分功能实现,安卓开发面试基础
  20. [HAOI 2006]旅行comf

热门文章

  1. Python-文件读写和嵌套循环
  2. 夫妻吵架将4个月大女婴扔在路边
  3. WordPress代码:给网站添加外链go跳转效果
  4. 郑州python编程_郑州python班
  5. 修改UIImage大小的正确姿势
  6. storm java文档_Apache Storm 官方文档 —— Ack 框架的实现
  7. 《拳皇咆哮》完整源码资源_我一直在咆哮
  8. 改变windows下installer文件夹位置,目录链接(不是快捷方式)
  9. DM的学习心得和知识总结(一)|DM数据库Real Application Testing之Database Replay实操(一)
  10. 时间啊,过的太快了。。。