Py学习  »  Python

WRF-Python库插值到指定离地高度层并绘图

气象学家 • 2 年前 • 1599 次点击  

任务

从wrfout文件中提取o3变量,并将其数据结果插值到想要的离地高度层上(示例中是1km、3km、5km、10km),进行可视化。下面提供示例代码,其中用虚线----框住的部分是插值的关键代码。

代码

import numpy as np    
import xarray as xr   
from netCDF4 import Dataset
from wrf import to_np, getvar, get_cartopy, cartopy_xlim,cartopy_ylim, latlon_coords,interpz3d,destagger

import matplotlib as mpl
import matplotlib.pyplot as plt  
from matplotlib.cm import get_cmap
from matplotlib.colors import ListedColormap  
import cartopy.crs as ccrs       
import cartopy.feature as cfeature 
from cartopy.mpl.ticker import (LongitudeFormatter, LatitudeFormatter, LatitudeLocator, LongitudeLocator)
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from matplotlib.axes import Axes
from cartopy.mpl.geoaxes import GeoAxes
import matplotlib.patches as mpatches
import matplotlib.transforms as mtransforms
from matplotlib import ticker as mticker
import cmaps

def mapart(ax): 
    ax.coastlines('50m', color='k', lw=0.3)                
    ax.set_xlim(cartopy_xlim(o3))
    ax.set_ylim(cartopy_ylim(o3))
    ax.set_yticks([])

title='O3 concentrations above surface'
rowlabels=[ '10km','5km''3km','1km']      

#------------------------------------------------------
ncfile = Dataset('wrfout_d01_2018-08-02_00:00:00')

ph=getvar(ncfile, "PH",timeidx=0)[:,10:140,10:140]
phb=getvar(ncfile, "PHB",timeidx=0)[:,10:140,10:140]
hgt=getvar(ncfile, "HGT",timeidx=0)[10:140,10:140]
o3 = getvar(ncfile, "o3",timeidx=0)[:,10:140,10:140]

P=ph+phb
P = destagger(P,0,meta=True)
gmp=P/9.81-hgt

z_list=[10000.,5000.,3000.,1000.] #unit:m

o3_z = interpz3d(o3,gmp,np.array(z_list))
#--------------------------------------------------------

lats, lons = latlon_coords(o3)
cart_proj = get_cartopy(o3)

fig,ax=plt.subplots(4,1,figsize=(6,6),dpi=300,subplot_kw={'projection': cart_proj})

for i in range(len(z_list)):
    
    mapart(ax[i]) 
    ac0=ax[i].contourf(to_np(lons), to_np(lats), 1000.0*to_np(o3_z[i]), levels=np.arange(12,54,3),
             transform=ccrs.PlateCarree(),
             cmap=cmaps.BlGrYeOrReVi200,extend='both')
    
    ax[i].set_ylabel(rowlabels[i],size=10)     
 
plt.suptitle(title,fontsize='small',fontweight='heavy')
plt.savefig('test.png')
plt.show()

结果

      








声明:欢迎转载、转发本号原创内容,可留言区留言或者后台联系小编(微信:gavin7675)进行授权。气象学家公众号转载信息旨在传播交流,其内容由作者负责,不代表本号观点。文中部分图片来源于网络,如涉及作品内容、版权和其他问题,请后台联系小编处理。

   欢迎加入气象学家交流群   

请备注:姓名/昵称-单位/学校-研究方向



往期推荐

 ERA5-Land陆面高分辨率再分析数据(32TB)

★ NASA最新版本CMIP6降尺度数据集30TB

★ ERA5常用变量再分析数据(26TB)

 EC数据商店推出Python在线处理工具箱

★ EC打造实用气象Python工具Metview

 TRMM 3B42降水数据(Daily/3h)

 科研数据免费共享: GPM卫星降水数据

 气象圈子有人就有江湖,不要德不配位!

 请某气象公众号不要 “以小人之心,度君子之腹”!

★ 机器学习简介及在短临天气预警中的应用

★ AMS推荐|气象学家-海洋学家的Python教程

★ Nature-地球系统科学领域的深度学习及理解

★ 采用神经网络与深度学习来预报降水、温度

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/148953