【wrf-python】3个pcolormesh子图绘制

2023-12-19

# _*_ coding:utf-8 _*_
#----------------------导入数据读取和处理的模块-----------------------
from netCDF4 import Dataset
from pathlib import Path
import glob
import xarray as xr
import numpy as np
import pandas as pd
from wrf import getvar, ALL_TIMES, latlon_coords, xy_to_ll, ll_to_xy, smooth2d, \
get_cartopy,cartopy_xlim,cartopy_ylim,to_np,to_xy_coords,interplevel,CoordPair,vertcross

#----------------------导入画图相关函数-------------------------------
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import matplotlib.ticker as ticker
from cartopy import mpl
import cartopy.crs as ccrs
import cartopy.feature as cfeat
import cartopy.io.shapereader as shapereader
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatter,LongitudeLocator,LatitudeLocator
from pylab import *

#-------------------- 导入颜色包---------------------------------------
import seaborn as sns
from matplotlib import cm
from matplotlib.colors import ListedColormap

#------------------- 导入插值模块----------------------------------------
from scipy.interpolate import interp1d #引入scipy中的一维插值库
from scipy.interpolate import griddata #引入scipy中的二维插值库
from scipy.interpolate import interp2d

#----------------------字体设置--------------------------------------------
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['font.size'] = 15


#输入路径,读取nc数据属性
path = "J:/0hsyPaper202406/4data/4-wrfout-231106/copy_merge/wrfout_wuwei1.nc"
ds=xr.open_dataset(path)
ds.dims

#nc数据coords变量名重命名。
df = ds.rename({"Time":"time"})
df.dims


dft2=df["T2"]
dft2["XTIME"].data
# dft2["XLAT"].data

t2=dft2.loc[29:,9:108,9:88]
t2["XTIME"].data

t2_spr = t2.loc[0:92]
# t2_spr["XTIME"].data
t2_sum = t2.loc[92:184]
# t2_sum["XTIME"].data
t2_aut = t2.loc[184:275]
# t2_win["XTIME"].data

t2_spr_meant = t2_spr.mean(dim="time")-273.15   #(-14.80969238, 9.49023438)
print(t2_spr_meant)
t2_sum_meant = t2_sum.mean(dim="time")-273.15   #(-3.60955811, 22.57196045)
t2_aut_meant = t2_aut.mean(dim="time")-273.15   #(-14.19775391, 6.83230591)

lats,lons=latlon_coords(t2)
# lats,lons

fig=plt.figure(figsize=(20,18))
cart_proj = ccrs.LambertConformal(central_longitude=103, standard_parallels=(30, 60))
###################################################################################################
#t2_spr_meant
###################################################################################################
t2min=-15
t2max=25
ax1=plt.subplot(1,3,1,projection=cart_proj)
#1、图题########################
ax1.set_title("Spring T2 temperature",fontsize=20)
ax1.set_title('unit: ℃',loc='right',fontsize=16)

#2、叠加区域shp#######################################
shp="F:/市.shp"
cnmap=cfeat.ShapelyFeature(shapereader.Reader(shp).geometries(), ccrs.PlateCarree(), edgecolor="black", facecolor='none')
ax1.add_feature(cnmap, linewidth=1)

#3、设置模拟区域范围与网格形式########################
levels1=np.arange(-15,15)
im1=plt.pcolormesh(to_np(lons[0]), to_np(lats[0]), to_np(t2_spr_meant),  vmin=t2min, vmax=t2max,
            cmap=get_cmap("coolwarm"),transform=ccrs.PlateCarree())

ax1.xaxis.set_major_formatter(LONGITUDE_FORMATTER)
ax1.yaxis.set_major_formatter(LATITUDE_FORMATTER)
lon_format=LongitudeFormatter()
lat_format=LatitudeFormatter()

gl1 = ax1.gridlines(draw_labels = True,  linestyle=":", crs=ccrs.PlateCarree(), linewidth=1, color="grey",
                        x_inline=False, y_inline=False)
#gl.top_labels = False #关闭上部经纬度标签
gl1.right_labels = False
gl1.top_labels = False
# gl.xlocator = mticker.FixedLocator(np.arange(70,140,10))
# gl.ylocator = mticker.FixedLocator(np.arange(10,60,10))
gl1.xlabel_style ={"size":18, "color":"black"} #修改经纬度坐标网格字体大小
gl1.ylabel_style ={"size":18, "color":"black"} #修改经纬度坐标网格字体大小
gl1.rotate_labels = False

#4、设置colorbar###########################
# cbar1=plt.colorbar(ax=ax1,shrink=0.98)

###################################################################################################
#t2_sum_meant
###################################################################################################
ax2=plt.subplot(1,3,2,projection=cart_proj)
#1、图题########################
ax2.set_title("Summer T2 temperature",fontsize=20)
ax2.set_title('unit: ℃',loc='right',fontsize=16)

#2、叠加区域shp#######################################
shp="F:/市.shp"
cnmap=cfeat.ShapelyFeature(shapereader.Reader(shp).geometries(), ccrs.PlateCarree(), edgecolor="black", facecolor='none')
ax2.add_feature(cnmap, linewidth=1)

#3、设置模拟区域范围与网格形式########################
levels2=np.arange(0,25)
im2=plt.pcolormesh(to_np(lons[0]), to_np(lats[0]), to_np(t2_sum_meant),   vmin=t2min, vmax=t2max,
            cmap=get_cmap("coolwarm"),transform=ccrs.PlateCarree())

ax2.xaxis.set_major_formatter(LONGITUDE_FORMATTER)
ax2.yaxis.set_major_formatter(LATITUDE_FORMATTER)
lon_format=LongitudeFormatter()
lat_format=LatitudeFormatter()

gl2 = ax2.gridlines(draw_labels = True,  linestyle=":", crs=ccrs.PlateCarree(), linewidth=1, color="grey",
                        x_inline=False, y_inline=False)
#gl.top_labels = False #关闭上部经纬度标签
gl2.right_labels = False
gl2.top_labels = False
# gl.xlocator = mticker.FixedLocator(np.arange(70,140,10))
# gl.ylocator = mticker.FixedLocator(np.arange(10,60,10))
gl2.xlabel_style ={"size":18, "color":"black"} #修改经纬度坐标网格字体大小
gl2.ylabel_style ={"size":18, "color":"black"} #修改经纬度坐标网格字体大小
gl2.rotate_labels = False

#4、设置colorbar###########################
# cbar2=plt.colorbar(ax=ax2,shrink=0.98)

###################################################################################################
#t2_win_meant
###################################################################################################
ax3=plt.subplot(1,3,3,projection=cart_proj)
#1、图题########################
ax3.set_title("Autumn T2 temperature",fontsize=20)
ax3.set_title('unit: ℃',loc='right',fontsize=16)

#2、叠加区域shp#######################################
shp="F:/市.shp"
cnmap=cfeat.ShapelyFeature(shapereader.Reader(shp).geometries(), ccrs.PlateCarree(), edgecolor="black", facecolor='none')
ax3.add_feature(cnmap, linewidth=1)

#3、设置模拟区域范围与网格形式########################
levels3=np.arange(-15,25)
im3=plt.pcolormesh(to_np(lons[0]), to_np(lats[0]), to_np(t2_aut_meant), vmin=t2min, vmax=t2max,
            cmap=get_cmap("coolwarm"),transform=ccrs.PlateCarree())

ax3.xaxis.set_major_formatter(LONGITUDE_FORMATTER)
ax3.yaxis.set_major_formatter(LATITUDE_FORMATTER)
lon_format=LongitudeFormatter()
lat_format=LatitudeFormatter()

gl3 = ax3.gridlines(draw_labels = True,  linestyle=":", crs=ccrs.PlateCarree(), linewidth=1, color="grey",
                        x_inline=False, y_inline=False)
#gl.top_labels = False #关闭上部经纬度标签
gl3.right_labels = False
gl3.top_labels = False
# gl.xlocator = mticker.FixedLocator(np.arange(70,140,10))
# gl.ylocator = mticker.FixedLocator(np.arange(10,60,10))
gl3.xlabel_style ={"size":18, "color":"black"} #修改经纬度坐标网格字体大小
gl3.ylabel_style ={"size":18, "color":"black"} #修改经纬度坐标网格字体大小
gl3.rotate_labels = False

#4、设置colorbar###########################
# cbar3=plt.colorbar(ax=ax3,shrink=0.98)

#####################################################################################################################
fig.subplots_adjust(right=0.9)               #前面三个子图的总宽度为全部宽度的0.9,剩下的0.1用来放置colorbar
#colorbar左下宽高
l=0.92
b=0.31
w=0.018
h=1-2*b
#对应l,b,w,h,设置colorbar位置
rect = [l,b,w,h]
cbar_ax = fig.add_axes(rect)
cb=plt.colorbar(im3, cax=cbar_ax, shrink=0.68)
#设置colorbar标签字体等
cb.ax.tick_params(labelsize=16)
font = {"family":"serif",
       "color": "black",
       "weight":"normal"}
# cb.set_label("T", fontdict=font, loc="top")
cb.ax.set_title("T2 ℃")

plt.savefig("t2_season_mean_wuwei1_pcolormesh.png", dpi=900,bbox_inches = 'tight')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【wrf-python】3个pcolormesh子图绘制 的相关文章

随机推荐

  • 【手写数字识别】BP神经网络手写数字识别【含GUI Matlab源码 868期】

    博主简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 Matlab项目合作可私信 个人主页 海神之光 代码获取方式 海神之光Matlab王者学习之路 代码获取方式 座右铭 行百里者 半于九十 更多Matlab仿真内容点击 Matl
  • LocalDateTime、LocalDate、Date的相互转换

    使用背景 LocalDateTime 及 LocalDate 是 Java8 的新特性 有时为了兼容 Date 类型需要进行转换 今天的项目就有一个需求是实现一个函数 能够计算出当天在一年中的第多少天 通过搜索找到java8有LocalDa
  • Python3 函数是什么

    在Python3中 函数是一段可重复使用的代码块 用于完成特定的任务 函数可以接受参数 并且可以返回结果 定义函数 在Python3中 可以使用def关键字来定义函数 函数的基本语法如下 def function name paramete
  • 白光迈克尔逊干涉仪

    摘要 白光干涉测量法是一种非接触式技术 用于精确测量 例如表面轮廓和微小位移 使用迈克尔逊干涉仪设置和氙灯光源 在VirtualLab Fusion中演示了白光干涉测量 考虑到光源的光谱特性 即有限的相干长度 结果显示仅当两个臂的路径长度几
  • 回溯算法第零篇【递归、搜索与回溯】【回溯算法入门必看】

    本篇文章的目的 1 给小伙伴们对回溯算法中的名词进行解释 2 消除递归的恐惧 回溯是递归的一个分支 给小伙伴们一个建议 整篇文章都要看完 一字不漏 全是干货 注意 分析回溯的思想之前 我们得知道一个关系 递归包含搜索 搜索包含回溯 所以我们
  • ASAM CEO Marius Dupuis 到访深信科创

    2023年12月14日 自动化及测量系统标准协会 以下简称 ASAM 首席执行官CEO Marius Dupuis 到访深信科创研发中心 参观深信科创在CARLA社区 Synkrotron OasisSim商业仿真平台建设方面的成果 并与深
  • 干涉条纹研究

    干涉测量是用于精确测量中最广泛应用的技术之一 通过观察和研究条纹图案 可以判断表面形状质量或关于光谱带宽的仪表信息 利用VirtualLab Fusion中非序列场追迹技术 可以轻松地设置和分析光学干涉仪 在这里提出两个经典的基于迈克尔逊干
  • 计算机毕设项目 - 共享充电宝管理系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 系统流程 3 2 1 系统开发流程
  • HamronyOS 自动化测试框架使用指南

    概述 为支撑 HarmonyOS 操作系统的自动化测试活动开展 我们提供了支持 JS TS 语言的单元及 UI 测试框架 支持开发者针对应用接口进行单元测试 并且可基于 UI 操作进行 UI 自动化脚本的编写 本指南重点介绍自动化测试框架的
  • 迈向高质量发展!用友iuap助力央国企升级数智底座

    国有企业作为中国特色社会主义经济的 顶梁柱 肩负推动我国经济高质量发展的重要责任 这就必然要求国有企业顺应数字经济时代的发展 进行数智化转型 发挥数据价值 推动业务和管理的重构与创新 同时实现企业数智化 信创化相结合的价值化国产替代 这是国
  • Python3 基础语法

    Python3的基础语法包括以下几个方面 注释 使用 符号来添加单行注释 注释用于解释代码的作用 例如 这是一个单行注释 使用三引号 或 可以添加多行注释 例如 http www jshk com cn mb reg asp kefu xi
  • java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案

    使用技术 Spring Cloud Spring Boot Mybatis 微服务 服务监控 可视化运营 B2B2C平台 平台管理端 包含自营 商家平台端 多商户入驻 PC买家端 手机wap 公众号买家端 微服务 30个通用微服务如 商品
  • 利用强化学习训练自适应对话系统

    随着人工智能的发展 对话系统成为了人机交互的重要组成部分 传统的对话系统常常基于规则或模板 缺乏灵活性和自适应性 而利用强化学习来训练自适应对话系统 则可以使系统具备更好的对话能力和智能化水平 本文将介绍利用强化学习训练自适应对话系统的方法
  • 纯国产DSP,QX320F28335,自研内核指令集,主频150MHz,自研工具链,硬件兼容TMS320F28335

    32位单核CPU 主频150MHz flash 1M SRAM 500KB 单精度浮点运算FPU 3个4M精度12位的ADC 12个ePWM 6个HRPWM 150ps
  • 最新渗透测试入门教程(非常详细),从零基础入门到精通,看完这一篇就够了

    什么是渗透测试 渗透测试就是模拟真实黑客的攻击手法对目标网站或主机进行全面的安全评估 与黑客攻击不一样的是 渗透测试的目的是尽可能多地发现安全漏洞 而真实黑客攻击只要发现一处入侵点即可以进入目标系统 一名优秀的渗透测试工程师也可以认为是一个
  • 如何利用CHAT写C程序?

    问CHAT 用c语言编写在二维字符数组中查找某个字符串 CHAT回复 以下是一个简单的C程序 它将在二维字符数组中查找特定的字符串 c include
  • 题解 | #输出某一年的各个月份的天数#

    三方寄过去了 告诉我停止24届招聘 全部毁约 牛的 he芯 毁约应届生 34316 广西北部湾银行2022年校园招聘 广西北部湾银行股份有限公司2022届校园招聘 看终端大把大把15级的 这个14级是不是终端bg的白菜了 程序员面试六战六捷
  • 图片怎么转PDF?这些方法让pdf转换不降质

    当我们需要在电脑上保存一些重要的图片资料时 我们通常会将其转换成PDF格式 但在这个转换过程中 通常会损害到图片的清晰度 而在某些工作场合中 我们对文件的清晰度要求较高 一张被损坏了清晰度的文件显然无法满足我们的需求 那到底图片转pdf怎么
  • 【数字识别】机器视觉字符识别(含读音)【含Matlab源码 3132期】

    博主简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 Matlab项目合作可私信 个人主页 海神之光 代码获取方式 海神之光Matlab王者学习之路 代码获取方式 座右铭 行百里者 半于九十 更多Matlab仿真内容点击 Matl
  • 【wrf-python】3个pcolormesh子图绘制

    coding utf 8 导入数据读取和处理的模块 from netCDF4 import Dataset from pathlib import Path import glob import xarray as xr import nu