python--绘制WRF模式近地面风场以及辐射

news/2024/5/20 13:54:37/文章来源:https://blog.csdn.net/weixin_44237337/article/details/127302917

使用python自动化绘制WRF模式输出的风场以及辐射

本脚本主要用来自动化处理WRF模式数据,可以根据自己指定的时间范围以及时间步长绘制相应的数据

1 导入库

import cmaps
import numpy as np
import glob
from netCDF4 import Dataset
import matplotlib.pyplot as plt
from matplotlib.cm import get_cmap
import cartopy.crs as crs
from cartopy.feature import NaturalEarthFeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from wrf import (to_np, getvar, smooth2d, get_cartopy, cartopy_xlim,cartopy_ylim, latlon_coords,extract_global_attrs)
import proplot as pplt
import pandas as pd
import datetime
import os

2 选择数据范围

需要自己手动选择:初始时间、结束时间、时间步长

输入格式为:年-月-日-时、年-月-日-时、时
2022071000
2022071012
03

date = input()
frst = input()
step = input()path = r'G:/'+ date #只能是已经存在的文件目录且有数据才可以进行读取start = datetime.datetime.strptime(date,'%Y%m%d%H').strftime("%Y-%m-%d_%H_%M_%S")end = (datetime.datetime.strptime(date,'%Y%m%d%H')+datetime.timedelta(hours=int(frst))).strftime("%Y-%m-%d_%H_%M_%S")intp = (datetime.datetime.strptime(date,'%Y%m%d%H')+datetime.timedelta(hours=int(step))).strftime("%Y-%m-%d_%H_%M_%S")fstart = path+'/*'+start
fintp  = path+'/*'+intp
fend   = path+'/*'+endfile = path+'/*'filestart = glob.glob(fstart)
fileintp = glob.glob(fintp)
fileend = glob.glob(fend)filelist  = glob.glob(file)filelist.sort()   rstart = np.array(np.where(np.array(filelist)==filestart))[0][0]
rintp = np.array(np.where(np.array(filelist)==fileintp))[0][0]
rend   = np.array(np.where(np.array(filelist)==fileend))[0][0]

3定义读取数据函数以及绘图函数

定义 函数读取风速资料U、V,以及辐射(辐射包括三部分)

  • 将读取的资料进行绘图,并将绘图后的结果自动 保存到指定路径下,方面后续绘制动图
def plot(i):ncfile = Dataset(i)#get u10 v10u10 = getvar(ncfile,'U10')v10 = getvar(ncfile,'V10')w10 = np.sqrt(u10*u10+v10*v10)#get net_radswdown = getvar(ncfile,'SWDOWN')glw    = getvar(ncfile,'GLW')olr    = getvar(ncfile,'OLR')rad    = swdown+glw+olrWE = extract_global_attrs(ncfile,'WEST-EAST_GRID_DIMENSION')['WEST-EAST_GRID_DIMENSION']SN = extract_global_attrs(ncfile,'SOUTH-NORTH_GRID_DIMENSION')['SOUTH-NORTH_GRID_DIMENSION']lev= extract_global_attrs(ncfile,'BOTTOM-TOP_GRID_DIMENSION')['BOTTOM-TOP_GRID_DIMENSION']t =u10.Time# time = pd.to_datetime((t)).strftime('%Y-%m-%d-%H')# Get the latitude and longitude pointslats, lons = latlon_coords(u10)# Create a figuref = pplt.figure(figsize=(5,5))ax = f.subplot(111, proj='lcyl')m=ax.contourf(to_np(lons), to_np(lats), to_np(w10),cmap=cmaps.MPL_RdYlBu_r,levels=np.arange(4,10.5,0.5),extend='both')ax.contour(to_np(lons), to_np(lats), to_np(rad),levels=8,linewidth=0.9,color='grey',# cmap=cmaps.MPL_RdYlBu_r,)step=4ax.quiver(to_np(lons)[::step,::step],to_np(lats)[::step,::step],to_np(u10)[::step,::step],to_np(v10)[::step,::step],)ax.format(ltitle='Sea surface WindSpeed (m/s)',coast=True,labels=True,lonlim=(120, 130),latlines=2,lonlines=2,latlim=(25, 35),)props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)bbox_props = dict(boxstyle="round", fc="w", ec="0.5", alpha=1)textstr = '\n'.join((r'$  Init:$'+ ncfile.START_DATE,r'$Valid:$' + i[-19:],# r'$\sigma=%.2f$' % (2, ))))ax.text(0.0, 1.2, textstr, transform=ax.transAxes, fontsize=9,verticalalignment='top', )ax.text(0.65, 1.2, 'U at 10 M(m s$^{-1}$)'+'\n'+'net_radiation(W m$^{-2}$)', transform=ax.transAxes, fontsize=9,verticalalignment='top', )ax.text(0.00, -0.07, ncfile.TITLE+'\n'+r'WE='+str(WE)+';SN='+str(SN)+';Lev='+str(lev)+';dx='+str(int(ncfile.DX))+'km;'+'Phys opt='+str(ncfile.MP_PHYSICS)+';PBL Opt='+str(ncfile.BL_PBL_PHYSICS)+';Cu Opt='+str(ncfile.CU_PHYSICS),fontsize=8,horizontalalignment='left',verticalalignment='top',transform=ax.transAxes,)f.colorbar(m, loc='r',label='',length=0.75,width=0.15)plt.show()savepath = r'J:/'+ dateif not os.path.exists(savepath):os.makedirs(savepath)f.savefig(savepath+'\\uv10'+i[-19:]+'.jpg')return

4 定义代码运行函数。

def plot_uv(fn):for i  in fn:plot(i)print('finish'+i)returnif __name__ == "__main__":plot_uv(fn)print('uvplot is finish')

5 个例测试

  • 方面数据测试,取削封装函数运行。
path = r'G:\2022071000/*'file = glob.glob(path)file.sort()ncfile = Dataset(file[0])#get u10 v10
u10 = getvar(ncfile,'U10')
v10 = getvar(ncfile,'V10')
w10 = np.sqrt(u10*u10+v10*v10)
#get net_rad
swdown = getvar(ncfile,'SWDOWN')
glw    = getvar(ncfile,'GLW')
olr    = getvar(ncfile,'OLR')rad    = swdown+glw+olrWE = extract_global_attrs(ncfile,'WEST-EAST_GRID_DIMENSION')['WEST-EAST_GRID_DIMENSION']
SN = extract_global_attrs(ncfile,'SOUTH-NORTH_GRID_DIMENSION')['SOUTH-NORTH_GRID_DIMENSION']
lev= extract_global_attrs(ncfile,'BOTTOM-TOP_GRID_DIMENSION')['BOTTOM-TOP_GRID_DIMENSION']t =datetime.datetime.strptime(u10.Time.values,'%Y%m%d%H').strftime("%Y-%m-%d_%H_%M_%S")
# time = pd.to_datetime((t)).strftime('%Y-%m-%d-%H')# Get the latitude and longitude points
lats, lons = latlon_coords(u10)# Create a figure
f = pplt.figure(figsize=(5,5))
ax = f.subplot(111, proj='lcyl')m=ax.contourf(to_np(lons), to_np(lats), to_np(w10),cmap=cmaps.MPL_RdYlBu_r,)
ax.contour(to_np(lons), to_np(lats), to_np(rad),levels=8,linewidth=0.9,color='grey',# cmap=cmaps.MPL_RdYlBu_r,)
step=4
ax.quiver(to_np(lons)[::step,::step],to_np(lats)[::step,::step],to_np(u10)[::step,::step],to_np(v10)[::step,::step],)ax.format(ltitle='Sea surface WindSpeed (m/s)',coast=True,labels=True,lonlim=(120, 130),latlines=2,lonlines=2,latlim=(25, 35),)props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)bbox_props = dict(boxstyle="round", fc="w", ec="0.5", alpha=1)textstr = '\n'.join((r'$  Init:$'+ ncfile.START_DATE,r'$Valid:$' + file[],# r'$\sigma=%.2f$' % (2, ))))
ax.text(0.0, 1.2, textstr, transform=ax.transAxes, fontsize=9,verticalalignment='top', )ax.text(0.65, 1.2, 'U at 10 M(m s$^{-1}$)'+'\n'+'net_radiation(W m$^{-2}$)', transform=ax.transAxes, fontsize=9,verticalalignment='top', )ax.text(0.00, -0.07, ncfile.TITLE+'\n'+r'WE='+str(WE)+';SN='+str(SN)+';Lev='+str(lev)+';dx='+str(int(ncfile.DX))+'km;'+'Phys opt='+str(ncfile.MP_PHYSICS)+';PBL Opt='+str(ncfile.BL_PBL_PHYSICS)+';Cu Opt='+str(ncfile.CU_PHYSICS),fontsize=8,horizontalalignment='left',verticalalignment='top',transform=ax.transAxes,)f.colorbar(m, loc='r',label='',length=0.75,width=0.15)
plt.show()
# f.savefig('J:\\20220710\\'+i[35:]+'.png')# for i in file:#     plot_p(i)#     print('finish'+i)# print(i)

# -*- coding: utf-8 -*-
"""
Created on %(date)s@author: %(jixianpu)sEmail : 211311040008@hhu.edu.cnintroduction : keep learning althongh walk slowly
"""
"""
introduction :绘制近地面的风场和辐射
"""
import cmaps
import numpy as np
import glob
from netCDF4 import Dataset
import matplotlib.pyplot as plt
from matplotlib.cm import get_cmap
import cartopy.crs as crs
from cartopy.feature import NaturalEarthFeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from wrf import (to_np, getvar, smooth2d, get_cartopy, cartopy_xlim,cartopy_ylim, latlon_coords,extract_global_attrs)
import proplot as pplt
import pandas as pd
import datetime
import osdate = input()
frst = input()
step = input()path = r'G:/'+ date #只能是已经存在的文件目录且有数据才可以进行读取start = datetime.datetime.strptime(date,'%Y%m%d%H').strftime("%Y-%m-%d_%H_%M_%S")end = (datetime.datetime.strptime(date,'%Y%m%d%H')+datetime.timedelta(hours=int(frst))).strftime("%Y-%m-%d_%H_%M_%S")intp = (datetime.datetime.strptime(date,'%Y%m%d%H')+datetime.timedelta(hours=int(step))).strftime("%Y-%m-%d_%H_%M_%S")fstart = path+'/*'+start
fintp  = path+'/*'+intp
fend   = path+'/*'+endfile = path+'/*'filestart = glob.glob(fstart)
fileintp = glob.glob(fintp)
fileend = glob.glob(fend)filelist  = glob.glob(file)filelist.sort()   rstart = np.array(np.where(np.array(filelist)==filestart))[0][0]
rintp = np.array(np.where(np.array(filelist)==fileintp))[0][0]
rend   = np.array(np.where(np.array(filelist)==fileend))[0][0]fn = filelist[rstart:rend:rintp]
# fn = filelist[rstart:rend:rintp]def plot(i):ncfile = Dataset(i)#get u10 v10u10 = getvar(ncfile,'U10')v10 = getvar(ncfile,'V10')w10 = np.sqrt(u10*u10+v10*v10)#get net_radswdown = getvar(ncfile,'SWDOWN')glw    = getvar(ncfile,'GLW')olr    = getvar(ncfile,'OLR')rad    = swdown+glw+olrWE = extract_global_attrs(ncfile,'WEST-EAST_GRID_DIMENSION')['WEST-EAST_GRID_DIMENSION']SN = extract_global_attrs(ncfile,'SOUTH-NORTH_GRID_DIMENSION')['SOUTH-NORTH_GRID_DIMENSION']lev= extract_global_attrs(ncfile,'BOTTOM-TOP_GRID_DIMENSION')['BOTTOM-TOP_GRID_DIMENSION']t =u10.Time# time = pd.to_datetime((t)).strftime('%Y-%m-%d-%H')# Get the latitude and longitude pointslats, lons = latlon_coords(u10)# Create a figuref = pplt.figure(figsize=(5,5))ax = f.subplot(111, proj='lcyl')m=ax.contourf(to_np(lons), to_np(lats), to_np(w10),cmap=cmaps.MPL_RdYlBu_r,levels=np.arange(4,10.5,0.5),extend='both')ax.contour(to_np(lons), to_np(lats), to_np(rad),levels=8,linewidth=0.9,color='grey',# cmap=cmaps.MPL_RdYlBu_r,)step=4ax.quiver(to_np(lons)[::step,::step],to_np(lats)[::step,::step],to_np(u10)[::step,::step],to_np(v10)[::step,::step],)ax.format(ltitle='Sea surface WindSpeed (m/s)',coast=True,labels=True,lonlim=(120, 130),latlines=2,lonlines=2,latlim=(25, 35),)props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)bbox_props = dict(boxstyle="round", fc="w", ec="0.5", alpha=1)textstr = '\n'.join((r'$  Init:$'+ ncfile.START_DATE,r'$Valid:$' + i[-19:],# r'$\sigma=%.2f$' % (2, ))))ax.text(0.0, 1.2, textstr, transform=ax.transAxes, fontsize=9,verticalalignment='top', )ax.text(0.65, 1.2, 'U at 10 M(m s$^{-1}$)'+'\n'+'net_radiation(W m$^{-2}$)', transform=ax.transAxes, fontsize=9,verticalalignment='top', )ax.text(0.00, -0.07, ncfile.TITLE+'\n'+r'WE='+str(WE)+';SN='+str(SN)+';Lev='+str(lev)+';dx='+str(int(ncfile.DX))+'km;'+'Phys opt='+str(ncfile.MP_PHYSICS)+';PBL Opt='+str(ncfile.BL_PBL_PHYSICS)+';Cu Opt='+str(ncfile.CU_PHYSICS),fontsize=8,horizontalalignment='left',verticalalignment='top',transform=ax.transAxes,)f.colorbar(m, loc='r',label='',length=0.75,width=0.15)plt.show()savepath = r'J:/'+ dateif not os.path.exists(savepath):os.makedirs(savepath)f.savefig(savepath+'\\uv10'+i[-19:]+'.jpg')returndef plot_uv(fn):for i  in fn:plot(i)print('finish'+i)returnif __name__ == "__main__":plot_uv(fn)print('uvplot is finish')

绘制结果如下图所示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_589157.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】从零开始的CS:GO逆向分析3——写出一个透视

【C++】从零开始的CS:GO逆向分析3——写出一个透视本篇内容包括:1. 透视实现的方法介绍2. 通过进程名获取进程id和进程句柄3. 通过进程id获取进程中的模块信息(模块大小,模块地址,模块句柄)4. 读取游戏内存(人物ViewMatrix,敌人坐标,敌人生命值,敌人阵营)5. 三维坐标…

Java项目本地部署搭建实战SpringBoot高校宿舍管理系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Java开发的SpringBoot高校宿舍管理系统源码。 技术架构 技术框架:SpringBoot2.0.0 Mybatis1.3.2 Mysql5.7 layui运行环境:jdk8 IntelliJ IDEA maven3 宝塔面板 …

触摸屏分类和触摸屏校准原理

一、触摸屏分类 常用触摸屏分两种 1、电阻触摸屏校正原理:导电ITO层及整个电路电阻值会随时间电压等轻微偏移,为了更精确与LCD显示屏上的功能图案相对应,重新校正计算标准位置。不校正可能会线性偏移,好的触摸屏一般无需校正&am…

【面经】360大数据开发面经

30 分钟,不做题。 欢迎点击此处关注公众号,每天分享大数据开发面经 介绍实习项目 会涉及平台开发吗 平时常用的语言 回答了 Java。 Python 用过吗 Java 实现一个单例要注意什么 懒汉式: public class Singleton {private static Sing…

钢铁行业经销商商城系统:完善钢材管控方案,轻松实现控价和防伪

钢铁工业是全球经济发展的核心,也是现代社会可持续发展的核心。根据数据显示,2020年中国钢材产量为13.25亿吨,同比增长9.96%;生铁产量为8.88亿吨,同比增长9.77%;粗钢产量为10.53亿吨,同比增长5.72%。 图片来源&#xf…

网络编程之TCP模型

1. TCP模型 2. socket 最早的socket和消息队列、共享内存、管道一致,只能实现一台主机多个进程间通信,后期加入了tcp/ip协议,使得支持不同主机的进程间通信 socket本质上是一个编程接口给(API),是对TCP/IP协议的封装…

利用表面肌电信号对手部抓取动作分类的新型卷积网络模型

利用表面肌电信号对手部抓取动作分类的新型卷积网络模型 文章目录利用表面肌电信号对手部抓取动作分类的新型卷积网络模型一.相关研究二.材料和方法2.1 数据集2.2 数据预处理2.3 1D-1D-CNN三.实验结果分析四.相关研究对比参考文献一.相关研究 肌电信号号代表肌肉功能的特征&…

ReentrantLock可重入、可打断、锁超时实现原理

述 前面讲解了ReentrantLock加锁和解锁的原理实现,但是没有阐述它的可重入、可打断以及超时获取锁失败的原理,本文就重点讲解这三种情况。 可重入 可重入是指一个线程如果获取了锁,那么它就是锁的主人,那么它可以再次获取这把锁…

神经网络损失函数不下降,神经网络参数优化算法

1、matlab支持向量机预测数据怎么减小相对误差 采用网格搜索法。基于长短时记忆神经网络算法的支持向量机的预测方法,为了保证支持向量机预测结果的准确性减小相对误差,选用网格搜索法对支持向量机参数进行优化处理。为了减小在预测算法中,由…

如何快速制作一个自己心目中的可视化大屏?

从来没有接触过可视化的软件,也没有什么基础,我应该怎么开始学习可视化呢?遇到过不少朋友问:我从来没有接触过可视化的软件,也没有什么基础,我应该怎么开始学习可视化呢? 其实很简单,现在市面上有很多公司研发的可视化软件/编辑网站已经不再像过去一样要求使用者是专业…

linux下挂载新的磁盘

1、前提条件 虚拟机上已经新增了新的磁盘。 物理机上已经接好了新的硬盘。 2、挂载步骤 查看系统磁盘情况。使用以下命令:(如果没出现新增磁盘,重启系统) fdisk -l可以看到新增的磁盘/dev/sdb下还没有进行分区。 对新增的磁…

我终于读懂了设计模式的七大原则。。。

文章目录💥🐒设计模式的目的🐴什么叫单一职责原则?🐤什么叫接口隔离原则?🐫什么叫做依赖倒转原则?🐑什么是里氏替换原则?🐘什么叫开闭原则&#x…

拒绝项目经理沟通崩溃瞬间,驾驭项目复杂性

如何一句话终结和项目经理的聊天?这还需要凭实力?这不是信手拈来的事,分分钟让项目经理怒气值加满、停止沟通。来整两句:  紧急需要不停歇——深夜10点,客户:“这个新需求明天必须上。”  方案最后都是…

多测师肖sir_高级讲师_第2个月第27讲解jmeter性能硬件指标

jmeter性能硬件指标 一、采集硬件指标的工具nmon 1、基本介绍 nmon,帮助在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新。 2、收集那些数据: nmon 工具可以为 AIX 和 Linux 性能专家提供监视和分析性能数据的功能&#xff0c…

枚举

目录枚举枚举的定义枚举的使用枚举的常用方法枚举的构造方法枚举的优缺点枚举与反射用反射能拿到枚举的实例对象吗?为什么枚举实现的单例模式是安全的?(面试问题)枚举 枚举的定义 枚举是在JDK1.5以后引入的。主要用途是:将一组常量组织起来…

TRC丨艾美捷TRC N-去羟乙基达沙替尼说明书

艾美捷TRC N-去羟乙基达沙替尼:达沙替尼的代谢产物。用于治疗癌症和免疫疾病。 艾美捷TRC N-去羟乙基达沙替尼化学性质: 目录号D290000 化学名称N-去羟乙基达沙替尼 同义词N-(2-氯-6-甲基苯基)-2-[[2-甲基-6-(1-哌嗪基)-4-嘧啶基]氨基]-5-噻唑甲酰胺&…

【漏洞复现-骑士cms-代码执行】vulfocus/骑士cms_cve_2020_35339

目录 一、靶场环境 1.1、平台: 1.2、知识: 1.3、描述: 二、漏洞验证 2.1、分析 2.4、解题: 一、靶场环境 1.1、平台: Vulfocus 漏洞威胁分析平台 123.58.224.8:57171 123.58.224.8:36168 ​ 123.58.224.8:36168 ​ 1.2、知…

多线程——synchronized详解

多线程——synchronized详解 “当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下 的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果&…

2023年中德(CSC-DAAD)博士后奖学金项目开始申报

10月9日,国家留学基金委(CSC)发布了《2023年中德(CSC-DAAD)博士后奖学金项目遴选工作启动》的通知。该项目提供50个博士后奖学金名额,申请受理时间为2022年11月1-30日。知识人网小编将CSC的申报指南全文转载…

osgEarth 三维坐标系和地理坐标系

目录 三维坐标系 地理坐标系 投影坐标系 坐标转换 三维坐标系 三维坐标系以地球球心为原点,三维世界坐标系 x轴正方向由地心指向本初子午线与赤道的交点,y轴正方向由地心指向东经 90 与赤道交点,z轴正方向由地心指向正北。 地理坐标系 地理…