整层水汽通量和整层水汽通量散度计算及python绘图

这篇具有很好参考价值的文章主要介绍了整层水汽通量和整层水汽通量散度计算及python绘图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

(2)整层水汽通量:
对单层水汽通量进行积分,采用np.trapz。
最终,整层水汽通量的单位为kg/m·s。

2、整层水汽通量散度
(1)单层水汽通量散度:
整层水汽通量和整层水汽通量散度计算及python绘图
采用的是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)

二、程序文章来源地址https://www.toymoban.com/news/detail-432039.html

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')

到了这里,关于整层水汽通量和整层水汽通量散度计算及python绘图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 相对熵与KL散度在计算机视觉中的应用

    计算机视觉是人工智能领域的一个重要分支,涉及到图像处理、视频处理、图形识别等多个方面。随着数据规模的不断增加,计算机视觉中的算法也不断发展,不断拓展。相对熵和KL散度在计算机视觉中具有重要的应用价值,可以帮助我们解决许多问题。 在本文中,我们将从

    2024年01月22日
    浏览(48)
  • 字符串和整型转换的那些事儿

    总的来说,有两种思路。 这种想法非常局限,是直接使用sprintf(),怎么改进呢?用循环。 这个循环的方式非常巧妙,利用strlen()作为不断增加的变化量,而当str赋初值都是0的时候,这些零对于字符串来说,相当于\\0,那么此时strlen检测出来的数量必然是0,这是一种需要记住

    2024年01月17日
    浏览(56)
  • Java 字节数组(byte[])和整型(int)的相互转换

          恰巧碰到了字节数组和整型的转换问题,特在此总结一下。将 int 按照小端法映射到 byte[] 中。即最低 8 位放在 byte[0] 中,依次类推。       这个实现起来比较简单,先保存最低的 8 位到 byte 数组中,然后不断的右移 8 位,每次保存低 8 位数据即可,参考代码:(

    2023年04月12日
    浏览(72)
  • 如何使用MATLAB处理涡度通量数据

    MATLAB MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 MATLAB是matrixlaboratory两个词的组合,意为矩阵工厂(矩阵实验室),软件主要面对科学计算、可视化

    2024年02月09日
    浏览(36)
  • UNIAPP中IOS和安卓应用热更新和整包更新app的方法

    公司有一个项目《配送APP》是用uniapp开发的,用于公司几百号骑士员工使用,功能已经很完备,具有分配配送任务,接单,取餐,完成,打卡等功能,用得一直很好,但唯一一个缺点是,当APP功能上有升级时需要通知全体骑手手动把旧版本卸载了,再手工下载新版本安装,更

    2023年04月08日
    浏览(47)
  • 【Python/绘图】python绘图

    1.1、基础柱形图 效果 : 1.2、设置颜色、图例、图的标题 坐标轴对象可以设置要画的内容的标签,画完后可以返回一个绘制内容对象,绘制内容对象可以画出y标签的值。 效果如下 : 可以在坐标轴画图的时候指定误差棒。 这里是将误差棒做成标签指示条了 1.3、柱状堆积图

    2024年02月07日
    浏览(32)
  • KL散度

    KL散度(Kullback-Leibler divergence),也称为相对熵(relative entropy),是用来衡量两个概率分布之间差异的一种指标。在机器学习中,KL散度常常用于度量两个概率分布之间的相似度或差异性。 具体来说,假设我们有两个概率分布 p ( x ) p(x) p ( x ) 和 q ( x ) q(x) q ( x ) ,其中 p ( x

    2024年02月03日
    浏览(45)
  • 14、KL散度

    KL 散度,是一个用来衡量两个概率分布的相似性的一个度量指标。 现实世界里的任何观察都可以看成表示成信息和数据,一般来说,我们无法获取数据的总体,我们只能拿到数据的部分样本,根据数据的部分样本,我们会对数据的整体做一个近似的估计,而数据整体本身有一

    2023年04月18日
    浏览(40)
  • 概率分布之间的散度(Divergence)

    Divergence between distributions.

    2024年02月08日
    浏览(41)
  • 【计算机图形学基础教程】MFC基本绘图函数2

    CGdiObject类:GDI绘图工具的基类 CBitmap类:封装了GDI画刷,可以选作设备上下文的当前画刷,用于填充图形的内部 CFont类:封装了GDI字体,可以选作设备上下文的当前字体 CPalette类:封装了GDI调色板,提供应用程序和显示器之间的颜色接口 CPen类:封装了GDI画笔,可以选作设备

    2024年02月03日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包