【气象常用】剖面图

效果图:

主要步骤:

1. 数据准备:我用的era5的散度数据(大家替换为自己的就好啦,era5数据下载方法可以看这里【数据下载】ERA5 各高度层月平均数据下载_era5月平均数据-CSDN博客

2. 数据处理:

3. 图像绘制:

详细代码:着急的直接拖到最后有完整代码

步骤一:导入库包及图片存储路径并设置中文字体为宋体,西文为新罗马(没有的库包要先下好奥,字体设置部分没有要求的话可以直接删除)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import xarray as xr

# 设置西文字体为新罗马字体,中文为宋体,字号为12
from matplotlib import rcParams
config = {
            "font.family": 'serif',
            "font.size": 12,
            "mathtext.fontset": 'stix',
            "font.serif": ['SimSun'],
          }
rcParams.update(config)
rcParams['axes.unicode_minus']=False

datapath = r'H:/00.csdn/01data/'
figpath = r'H:/00.csdn/02fig/'
shppath = r'H:/00.csdn/04shp/cn_shp/Province_9/Province_9.shp'

步骤二:读入数据

# 读入数据
f1 = xr.open_dataset(datapath + '202306_div.nc')
# print(f1)
div = f1['d'][0, 14:, :, :].values * 10**6
time = f1['time']
lons = f1['longitude'].values  
lats = f1['latitude'].values  
lon, lat = np.meshgrid(lons, lats)
lev = f1['level'][14:].values  
log_lev = np.log10(lev)  
print(log_lev)
print(lev)

步骤三:计算纬圈平均

##########################################################
# 数据处理
div_mean = np.mean(div, 1)

步骤四:绘制图像(剖面图+指定位置打点)

##########################################################
# 绘制图像  
fig = plt.figure(figsize=(15, 6))  
level = np.linspace(-4, 4, 9)

def plot_cont(location, data, text, textposition):  
    ax = fig.add_axes(location)  
    cs = ax.contourf(lons, log_lev, data, levels=level, cmap='RdBu_r', extend='both') 
 
    ax.plot(110, 2.9, 'r*', markersize=10)  # 'r*'表示红色星号,markersize控制大小
    
# 翻转纵坐标(即让高度从下到上递增)  
    ax.invert_yaxis()  
    
    x = ['%i°E' %lon for lon in lons[::40]]  
    y = [200, 300, 500, 700, 850, 1000]
    
    ax.set(xticks=lons[::40], xticklabels=x,
           yticks=np.log10(y), yticklabels=y, ylabel='hPa')
    
    # 设置标题和位置  
    title = ax.set_title(text, fontsize=12)  
    title.set_position(textposition)  # 调整位置  

    return cs  

# 调用上面的函数  
c1 = plot_cont([0.1, 0.1, 0.3, 0.25], div_mean, '(a) ERA5', [0.05, 1.05])  
c1 = plot_cont([0.45, 0.1, 0.3, 0.25], div_mean, '(b) ERA5', [0.05, 1.05])  
# 色标设置  
rect = [0.12, 0.015, 0.6, 0.02]  
cbar_ax = fig.add_axes(rect)  
  
cb = fig.colorbar(c1, drawedges=True,  
                  cax=cbar_ax, orientation='horizontal')  
cb.set_label('mm', fontsize=12)  
cb.ax.tick_params(length=0)  
  

步骤五:保存图像

# 保存图像
plt.savefig(figpath+'215 剖面图.png', dpi=600, bbox_inches='tight')
plt.show()  

完整代码在这里:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import xarray as xr

# 设置西文字体为新罗马字体,中文为宋体,字号为12
from matplotlib import rcParams
config = {
            "font.family": 'serif',
            "font.size": 12,
            "mathtext.fontset": 'stix',
            "font.serif": ['SimSun'],
          }
rcParams.update(config)
rcParams['axes.unicode_minus']=False

datapath = r'H:/00.csdn/01data/'
figpath = r'H:/00.csdn/02fig/'
shppath = r'H:/00.csdn/04shp/cn_shp/Province_9/Province_9.shp'
##########################################################
# 读入数据
f1 = xr.open_dataset(datapath + '202306_div.nc')
# print(f1)
div = f1['d'][0, 14:, :, :].values * 10**6
time = f1['time']
lons = f1['longitude'].values  
lats = f1['latitude'].values  
lon, lat = np.meshgrid(lons, lats)
lev = f1['level'][14:].values  
log_lev = np.log10(lev)  
print(log_lev)
print(lev)
##########################################################
# 数据处理
div_mean = np.mean(div, 1)
##########################################################
# 绘制图像  
fig = plt.figure(figsize=(15, 6))  
level = np.linspace(-4, 4, 9)

def plot_cont(location, data, text, textposition):  
      
    ax = fig.add_axes(location)  
  
    cs = ax.contourf(lons, log_lev, data, levels=level, cmap='RdBu_r', extend='both')  
    ax.plot(110, 2.9, 'r*', markersize=10)  # 'r*'表示红色星号,markersize控制大小
    # 翻转纵坐标(即让高度从下到上递增)  
    ax.invert_yaxis()  
    
    x = ['%i°E' %lon for lon in lons[::40]]  
    y = [200, 300, 500, 700, 850, 1000]
    
    ax.set(xticks=lons[::40], xticklabels=x,
           yticks=np.log10(y), yticklabels=y, ylabel='hPa')
    
    # 设置标题和位置  
    title = ax.set_title(text, fontsize=12)  
    title.set_position(textposition)  # 调整位置  

    return cs  
  
# 调用上面的函数  
c1 = plot_cont([0.1, 0.1, 0.3, 0.25], div_mean, '(a) ERA5', [0.05, 1.05])  
c1 = plot_cont([0.45, 0.1, 0.3, 0.25], div_mean, '(b) ERA5', [0.05, 1.05])  

# 色标设置  
rect = [0.12, 0.015, 0.6, 0.02]  
cbar_ax = fig.add_axes(rect)  
  
cb = fig.colorbar(c1, drawedges=True,  
                  cax=cbar_ax, orientation='horizontal')  
cb.set_label('mm', fontsize=12)  
cb.ax.tick_params(length=0)  
  
##########################################################
# 保存图像
plt.savefig(figpath+'215 剖面图.png', dpi=600, bbox_inches='tight')
plt.show()  

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

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

相关文章

高考试卷押运车视频监控解决方案

一、引言 高考作为我国教育领域的重要事件,其公正、公平和安全性一直备受社会关注。试卷押运作为高考的重要环节,其安全性直接关系到高考的顺利进行和考生的切身利益。因此,对高考试卷押运车实施视频监控解决方案,对于确保试卷安…

【Pr学习】01新建项目起步

【Pr学习】01新建项目起步 1、新建项目2.序列设置2.1新建序列2.2序列参数讲解2.3自定义设置 3.PR窗口认识3.1 项目窗口3.2 源窗口2.4 保存面板 4.剪辑导入4.1 素材导入4.2 视图切换4.3 时间轴4.4轨道工具4.5 节目窗口素材导入 5.基础操作5.1 取消视频音频链接5.2 单独渲染&…

在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher v1.5.0)

在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher v1.5.0) Install macOS on unsupported Macs 请访问原文链接:https://sysin.org/blog/install-macos-on-unsupported-mac/,查看最新版。原创作品,转载请保留出处。 作者主…

Hugging Face称检测到对其人工智能模型托管平台的“未经授权访问“

周五下午晚些时候,人工智能初创公司Hugging Face表示,其安全团队在本周早些时候检测到对Spaces的"未经授权访问",Spaces是Hugging Face用于创建、共享和托管人工智能模型和资源的平台。 Hugging Face 在一篇博文中说,这…

intel深度相机D455的使用

一、D455介绍 Intel RealSense D455 是RealSense D400系列的一部分,这个系列的设备以其高精度和可靠性而闻名。D455相比于之前的型号(如D415和D435),提供了更远的感知范围和更高的精度。 二、使用代码 我们先定义一下相关的函数…

深入理解Java中的List集合:解析实例、优化技巧与最佳实践

一:List 集合的基础 1.1 什么是 List 集合? List 集合是 Java 集合框架中的一种有序、可重复的数据结构,它继承自Collection 接口,允许存储多个元素。 与数组不同,List 集合的大小是动态可变的,可以根据…

Elasticsearch:基于多个 kNN 字段对文档进行评分

作者:来自 Elastic Madhusudhan Konda 通过具有多个 kNN 字段的最接近的文档对文档进行评分 Elasticsearch 不仅仅是一个词法(文本)搜索引擎。 Elasticsearch 是多功能搜索引擎,除了传统的文本匹配之外,还支持 k 最近…

海外高清短视频:四川京之华锦信息技术公司

海外高清短视频:探索世界的新窗口 在数字化时代的浪潮下,海外高清短视频成为了人们探索世界、了解异国风情的新窗口。四川京之华锦信息技术公司这些短视频以其独特的视角、丰富的内容和高清的画质,吸引了无数观众的目光,让人们足…

DI-engine强化学习入门(一)使用强化学习模型控制月球着陆器

控制程序观前提醒:本章内容为训练一个强化学习模型,并使用强化学习模型控制月球着陆器。安装和运行DI-engine示例。 什么是DI-engine? DI-engine 是一个由 OpenDILab 提供的开源强化学习(Reinforcement Learning,简称RL&#xf…

一次职业院校漏洞挖掘

这个是之前挖掘到的漏洞,目前网站进行重构做了全新的改版,但是这个漏洞特别经典,拿出来进行分享。看到src上面的很多敏感信息泄露,所以自己也想找一个敏感信息泄露,官网如图: 发现在下面有一个数字校园入口…

电源滤波器怎么选用

电源滤波器怎么选用 滤波器应用场景及作用第一步:第二步:第三步:第四步: 滤波器应用场景及作用 可以有效解决EMC测试无法通过、端口防护、滤除干扰、设备保护等问题 主要功能有: 1、降低主电源谐波; 2、保护驱动装置电力电子元件…

硬币检测电路设计

一、来源:凡亿教育 第一场:硬币检测装置原理分析、电路设计以及器件选型_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Zh4y1V7Px/?p1&vd_source43eb1cb50ad3175d7f3b9385905cd88f 二、开发软件:KEIL MDK 三、主控芯片&#…

大型制造业集团IT信息化总体规划方案(65页PPT)

方案介绍: 本大型制造业集团IT信息化总体规划方案旨在通过构建先进、高效、稳定的IT信息化系统,支撑集团各业务领域的运营和管理需求,促进集团整体运营效率和竞争力的提升。通过实施本项目,集团将能够更好地应对市场变化和客户需…

嫁接打印:经济与实用的完美结合

在制造领域,寻求经济且好用的技术方案至关重要。而在模具制造中,3D 打印随形水路在提升冷却效率和产品良率方面的卓越表现已得到广泛认同。如何更经济的应用3D打印技术,就不得不说嫁接打印了。 在嫁接打印的制造过程中,产品的一部…

Uniapp写一个简单的商品瀑布流界面+商品详情

最终效果: 整体内容比较简单,参考了一篇瀑布流文章和一篇商品详情文章随便修改整了下,主要是给想做这方便面的新人一个简单逻辑的展示(其实我也是第一次写这个emmm) 一.组件下载: uni-icon uni-goods-nav…

InsightFace | 基于 AI 增强的人脸检测

点击下方卡片,关注“小白玩转Python”公众号 概述 我将使用InsightFace,这是一个以其在复杂面部分析任务中的卓越表现而闻名的开源AI工具包。该工具包可以帮助完成诸如人脸检测、关键点识别、情感识别、年龄和性别估算以及属性分析等任务。 示例 !pip in…

yolov10/v8 loss详解

v10出了就想看看它的loss设计有什么不同,看下来由于v8和v10的loss部分基本一致就放一起了。 v10的论文笔记,还没看的可以看看,初步尝试耗时确实有提升 好记性不如烂笔头,还是得记录一下,以免忘了,废话结束…

tcp链接中的三次挥手是什么原因

一、tcp链接中的正常四次挥手过程? 刚开始双方都处于 ESTABLISHED 状态,假如是客户端先发起关闭请求。四次挥手的过程如下: 1、客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文…

Pycharm的基础设置+Pycharm与AutoDL服务器连接

一.pycharm的基础设置 1.下载pycharm profession版,配置之前博客里面的解释器mask2 2.run detect.py 3.终端的设置 (1)先直接在终端里面pip install 我们再创建一个测试python文件:terninal_test.py 虽然上面安装成功了包&#x…

Nested KVM Hypervisor Support

Description Nested KVM是指基于虚拟化技术的虚拟机管理系统。 Nested KVM在Intel处理器上,KVM使用Intel的vmx(virtualmachine eXtensions)来提高虚拟机性能,即硬件辅助虚拟化技术。如果一台虚拟机能够和物理机一样支持vmx&…