社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

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

任务

从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
 
1378 次点击