整层水汽通量和整层水汽通量散度计算及python绘图
一、公式推导
1、整层水汽通量:
(1)单层水汽通量:
在P坐标下,
单层水汽通量 = q·v/g
q的单位为kg/kg,v的单位为m/s。对于重力加速度g的单位要进行换算:

也就是说,重力加速度g的单位是10**-2·hPa·m**2/kg。
最终,单层水汽通量的单位为kg/m•hPa•s。
(2)整层水汽通量:
对单层水汽通量进行积分,采用np.trapz。
最终,整层水汽通量的单位为kg/m·s。
2、整层水汽通量散度
(1)单层水汽通量散度:

采用的是mpcalc.divergence。
即:metpy.calc.divergence(u, v, *, dx=None, dy=None, x_dim=- 1, y_dim=- 2)计算矢量的水平散度。
单层水汽通量散度单位为kg/m**2•hPa•s
(2)整层水汽通量散度:
对单层水汽通量散度进行积分,依然使用np.trapz。
为了显示好看,可将最终值提取10**-5或者10**-6次方。
因此整层水汽通量散度的最终单位为:10-5kg/(m**2·s)
二、程序
import matplotlib.pyplot as plt
import matplotlib
import xarray as xr
import cartopy.crs as ccrs
import cartopy.feature as cf
import cartopy.io.shapereader as shpreader
import cartopy.mpl.ticker as cticker
from cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatter
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import matplotlib.ticker as mticker
from datetime import datetime
#科学计算的包
from metpy.units import units #里面是单位
import metpy.constants as constants #里面是常数
import metpy.calc as mpcalc #里面有各种计算函数
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用黑体字体显示中文
plt.rcParams['axes.unicode_minus']=False # 正常显示负号位置
matplotlib.get_cachedir()
# Read Data
filename = r'D:\data\physic\201808_physic.nc'
f=xr.open_dataset(filename)
time = f.time[18:21] # 根据不同的个例选取时间
lev = f.level[23:] # 读取气压层,单位为mb,即hPa,一维的14.
lat = f.latitude # 读取纬度,一维的21
lon = f.longitude # 读取经度,一维的41
for i in range(18,21):
u = f.u[i,23:,:,:] # U风分量,单位为m/s
v = f.v[i,23:,:,:] # V风分量,单位为m/s
q = f.q[i,23:,:,:] # 读取比湿,单位为kg/kg
# # # 计算单层水汽通量和水汽通量散度
qv_u = u*q/(constants.g*10**-2) # g的单位为m/s2,换算为N/kg,再换算为10-2hPa·m2/kg,最终单层水汽通量的单位是kg/m•hPa•s
qv_v = v*q/(constants.g*10**-2) # 计算q*v/g,单位是kg/m•hPa•s
dx, dy = mpcalc.lat_lon_grid_deltas(lon, lat) # 将经纬度转换为格点距离
div_qv = np.zeros((lev.shape[0],lat.shape[0],lon.shape[0]))
for j in range(lev.shape[0]):
div_qv[j] = mpcalc.divergence(u = qv_u[j],v = qv_v[j],dx = dx ,dy = dy) # 单位是kg/m2•hPa•s
# # # 计算整层水汽通量散度
total_div_qv = np.trapz(div_qv, lev, axis=0)*10**5 #单位为10-5kg/(m**2*s)
# # # 计算整层水汽通量
total_q_u = np.trapz(qv_u,lev,axis=0) #将单位kg/(m*s)
total_q_v = np.trapz(qv_v,lev,axis=0)
a = np.sqrt(total_q_u * total_q_u + total_q_v * total_q_v)
# # # 绘图
levs = np.arange(-1, 1+0.1, 0.1)
fig = plt.figure(figsize=(12,9))
ax = fig.add_axes([1,0,1,1],projection=ccrs.PlateCarree())
ax.set_xticks(np.arange(114, 124, 1), crs=ccrs.PlateCarree()) #x刻度值
ax.set_yticks(np.arange(34, 39, 0.5), crs=ccrs.PlateCarree()) #y刻度值
ax.tick_params(axis='both', which='major', labelsize=15) #刻度修饰命令
ax.set_extent([114,124,34,39],crs = ccrs.PlateCarree()) #绘图范围限制,投影方式为ccrs.PlateCarree()
#ax.coastlines('50m', linewidth=0.8)
# 绘制水汽通量散度的阴影图,cmap颜色映射表。
mfc_contourf = ax.contourf(lon, lat,
total_div_qv,
cmap='seismic',
levels=levs,
extend='both', transform=ccrs.PlateCarree())
# 绘制水汽通量的箭头图
h1 = ax.quiver(lon[::2],lat[::2],total_q_u[::2,::2],total_q_v[::2,::2], #X,Y,U,V 确定位置和对应的风速
width = 0.002, #箭杆箭身宽度
scale = 700, # 箭杆长度,参数scale越小箭头越长
pivot = 'tail'#箭头的其实位置,这里表示从点起,还有点在中心的‘mid’
)
# 说明箭轴长度与风速的对应关系
ax.quiverkey(h1, #传入quiver句柄
X= 0.1, Y = -0.07, #确定 label 所在位置,都限制在[0,1]之间
U = 20, #参考箭头长度 表示20。
angle = 0, #参考箭头摆放角度。默认为0,即水平摆放
label='20m/s', #箭头的补充:label的内容 +
labelpos='E', #label在参考箭头的哪个方向; S表示南边
color = 'k',labelcolor = 'k', #箭头颜色 + label的颜色
)
# 绘制水汽通量的等值线
ct=ax.contour(lon,lat,a,8,colors='k',linewidths=1,levels=range(0,28,2))
# 标记ct每根线条的数值
ax.clabel(ct,inline=True,fontsize=10,fmt='%.0f')
# 绘制山东省界
province = shpreader.Reader(r'D:\shp\Shandong-city-2020\Shandong-city-2020.shp')
ax.add_geometries(province.geometries(), crs=ccrs.PlateCarree(), linewidths=0.5,edgecolor='k',facecolor='none')
ax.add_feature
# 图例,颜色与数值的对应关系。orientation:colorbar摆放的横竖位置。cax:colorbar放在指定位置,最高优先级。
position = fig.add_axes([ax.get_position().x0,
ax.get_position().y0-0.08,
ax.get_position().width,
0.02])
cb = fig.colorbar(mfc_contourf, orientation='horizontal', cax=position)
#cb.set_label('g/(m**2*s)', fontsize=12)
#fig.savefig(r'D:\py_pic\整层水汽通量和整层水汽通量散度图.jpg', bbox_inches = 'tight')
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p