气象数据Grib及Python绘图

文章较长,却将所有常见的气象数据类型进行了详细的介绍,对各种方法的优劣势进行了详细分析,相信对于阅读者来说会有一定程度的帮助

目录

GRIB

数据格式简介

使用Python处理Grib文件

法1:使用pygrib库

法2:使用cfgrib库

 pygrib库与cfgrib库的区别与各自的优势

使用建议


GRIB

数据格式简介

GRIB(General Regularly distributed Information in Binary form),是由世界气象组织(WMO)设计和维护的一种用于存储和传输网格数据的标准数据格式,它是一种自描述的二进制压缩格式,通常具有扩展名.grib,.grb或.gb。

世界气象组织一共发布了3各版本的GRIB标准:

  • GRIB 版本 0: 已淘汰,无技术支持,目前几乎不再使用。
  • GRIB 版本 1: 版本1是GRIB的历史遗留版本,已停止开发。由于它已在国际民航组织(ICAO)的世界范围预报系统中使用,因此仍得到WMO的认可。
  • GRIB 版本 2: 版本2格式是GRIB标准的扩展和强化,它与版本1相比在压缩比等性能上有更优异的表现。一些国家的数值天气预报机构(尤其是美国和欧洲)正在逐步采用此版本,版本2不能与版本1兼容。

GRIB数据格式是以一个被称为“报文”(Message)的数据结构为基本单元的集合体。每个“报文”中会存储一套经纬度、变量数组以及所有描述性的属性信息,而每个GRIB文件里会按顺序排列存储多个“报文”。

使用Python处理Grib文件

法1:使用pygrib库

In [1]: import pygribIn [2]: msgs = pygrib.open('./20180930-fc-sfc.grib')In [3]: msg1 = msgs[1]In [4]: msg1
Out[4]: 1:Surface pressure:Pa (instant):regular_ll:surface:level 0:fcst time 0 hrs:from 201809301200In [5]: msg1.keys()    # 查看所有关键字,此处列出的关键字都可以作为select的过滤条件
Out[5]:
['globalDomain','GRIBEditionNumber','eps',...'section5Length','analDate','validDate']In [6]: msg1.shortName   # 查看shortName
Out[6]: 'sp'In [10]: msg1.name    # 查看name
Out[10]: 'Surface pressure'In [17]: lats, lons = msg1.latlons()   # 提取经纬坐标In [21]: array = msg1.values    # 提取变量值In [23]: tps = msgs.select(shortName='tp')   # 选出所有shortName为tp的报文

法2:使用cfgrib库

为了能够更好的进行数据分析与可视化,请同时安装好numpy、pandas和matplotlib等常用库。

打开GRIB文件

ds = cfgrib.open_file('example.grib')

此处的open_file函数将GRIB文件加载为一个xarray.Dataset对象,该对象类似于Pandas的DataFrame,但专为多维数组设计,非常适合处理气象数据。

使用函数打开对应的文件后,就可以进行后续处理

提取特定变量

temperature = ds['t']  # 提取温度变量

 数据切片与索引

# 提取特定时间和层次的温度数据
temp_slice = temperature.sel(time='2023-01-01', level=500)

数据可视化:

数据可视化是理解和传达气象信息的关键步骤。利用matplotlib库,可以轻松地将GRIB数据绘制成图表。

import matplotlib.pyplot as plt
# 绘制温度场
temp_slice.plot()
plt.title('Temperature at 500 hPa on 2023-01-01')
plt.show()

CFGrib不仅支持基本的数据读取和可视化,还提供了一些高级功能,如丰富的数据处理功能。

 数据聚合:

# 计算某区域内的平均温度
mean_temp = temperature.sel(latitude=slice(30, 60), longitude=slice(120, 150)).mean(dim=['latitude', 'longitude'])

 单位转换:

# 将温度从K转换为°C
temperature_c = temperature - 273.15

写入GRIB文件:

除了读取,CFGrib也支持将处理后的数据重新写入GRIB格式,便于数据的存储和交换。

# 将处理后的温度数据写入新文件
temperature_c.to_grib('processed_temperature.grib')

 pygrib库与cfgrib库的区别与各自的优势

二者均是用于读取和处理 GRIB 格式的数据文件。

pygrib

  1. 概述

    • 基于 GRIB API (现为 ECMWF ecCodes) 的 Python 接口。
    • 提供对 GRIB 文件的全面支持,包括各种 GRIB 文件版本(GRIB1 和 GRIB2)。
  2. 优点

    • 灵活性:可以精确访问 GRIB 文件中的元数据和数据字段。
    • 详细的元数据支持:可以轻松提取关于每个 GRIB 消息的详细元数据,如时间、经纬度网格、变量名称等。
    • 广泛支持:支持读取几乎所有 GRIB 文件,兼容性较强。
  3. 适用场景

    • 需要详细访问和操作 GRIB 文件中的元数据。
    • 需要处理复杂的 GRIB 数据,例如气象模型输出或观测数据。
    • 需要逐条读取 GRIB 消息。
  4. 局限性

    • API 比较底层,操作起来可能需要更多代码和理解 GRIB 的知识。
    • 与现代科学计算工具(如 xarray)的集成较弱。

cfgrib

  1. 概述

    • 基于 ECMWF ecCodes,专为将 GRIB 文件加载为 xarray.Dataset 对象而设计。
    • 遵循 CF 元数据约定,便于与其他气象或气候数据工具集成。
  2. 优点

    • 集成性强:直接将 GRIB 文件转换为 xarray.Dataset,方便进行科学计算和可视化。
    • 面向科学计算:与 xarraydask 的无缝集成,支持并行计算和延迟加载。
    • 简化操作:对用户屏蔽了 GRIB 文件的复杂性,便于快速使用。
  3. 适用场景

    • 科学分析和研究,特别是基于 xarray 的气象或气候数据处理。
    • 不需要详细操作 GRIB 文件的元数据,只需要直接加载变量。
  4. 局限性

    • 功能有限:不支持所有 GRIB 文件,主要支持以 GRIB2 格式保存的气象数据(如 ECMWF 的 GRIB 数据)。
    • 灵活性较低:对 GRIB 文件中的元数据访问不如 pygrib 灵活。
    • 依赖 CF 约定:对不完全遵守 CF 标准的 GRIB 文件可能处理不当。

使用建议

  • 如果你的工作需要详细操作 GRIB 文件或分析元数据,推荐使用 pygrib
  • 如果你的工作专注于科学计算和分析,特别是需要使用 xarray 生态系统,推荐使用 cfgrib

结合两者使用也不失为一种高效的方法,例如,使用 pygrib 提取特定消息并了解文件结构,使用 cfgrib 进行数据分析和可视化

NCL以及Grib

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

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

相关文章

Selenium和WebDriver的安装与配置

1、Selenium的安装 直接黑窗口执行:pip install selenium3.141.0 可能遇到的问题: 解决方法配置环境变量: 找到目录:(以自己电脑为准) C:\Users\Administrator\AppData\Local\Programs\Python\Python38-…

HTML——45.单元格合并

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>表格</title></head><body><!--合并单元格&#xff1a;1.在代码中找到要合并的单元格2.在要合并的所有单元格中&#xff0c;保留要合并的第一个单元格…

APP项目测试 之 APP性能测试-- 性能测试工具(SoloPi工具)

1.SoloPi简介 &#xff08;1&#xff09;什么是SoloPi&#xff1f; SoloPi&#xff1a; 是一个无线化、非侵入式的 Android 自动化工具 &#xff0c;具备 录制回放、性能测试 等功能。 &#xff08;2&#xff09;SoloPi的作用是什么&#xff1f; 基础性能测试&#xff1a;能够…

IOS safari 播放 mp4 遇到的坎儿

起因 事情的起因是调试 IOS 手机下播放服务器接口返回的 mp4 文件流失败。对于没调试过移动端和 Safari 的我来说着实费了些功夫&#xff0c;网上和AI也没有讲明白。好在最终大概理清楚了&#xff0c;在这里整理出来供有缘人参考。 问题 因为直接用 IOS 手机的浏览器打开页面…

Mac 环境 VVenC 编译与编码命令行工具使用教程

VVenC VVenC 是一个开源的高效视频编码器&#xff0c;专门用于支持 H.266/VVC (Versatile Video Coding) 标准的编码。H.266/VVC 是继 HEVC (H.265) 之后的新一代视频编码标准&#xff0c;主要目的是提供比 HEVC 更高的压缩效率&#xff0c;同时保持或提高视频质量。H.266/VVC…

手搓一个ChatUI需要分几步

只关注项目代码的同学可以直接跳转目录中的正文部分&#xff0c;查看项目仓库和功能介绍。 引言 Chatbot的UI界面设计&#xff0c;是和传统软件不同的&#xff1a;都是当面一个简洁的对话框&#xff0c;框里预备着热乎的工具&#xff0c;可以随时更新。 像我这样做工的牛马&a…

018-spring-基于aop的事务控制

1 先配置平台事务管理器 2 在配置 spring提供的advice 3 事务增强的aop 总结&#xff1a; 事务就是要做2个配置&#xff1a; <!-- 1 开启事务管理器 不同的框架对应不同的事务管理器 --> <bean id"transactionManager" class"org.springframework.j…

IDEA工具使用介绍、IDEA常用设置以及如何集成Git版本控制工具

文章目录 一、IDEA二、建立第一个 Java 程序三、IDEA 常用设置四、IDEA 集成版本控制工具&#xff08;Git、GitHub&#xff09;4.1 IDEA 拉 GitHub/Git 项目4.2 IDEA 上传 项目到 Git4.3 更新提交命令 一、IDEA 1、什么是IDEA&#xff1f; IDEA&#xff0c;全称为 IntelliJ ID…

让 Agent 具备语音交互能力:技术突破与应用前景(16/30)

让 Agent 具备语音交互能力&#xff1a;技术突破与应用前景 一、引言 在当今数字化时代&#xff0c;人机交互方式正经历着深刻的变革。从早期的命令行界面到图形用户界面&#xff0c;再到如今日益普及的语音交互&#xff0c;人们对于与机器沟通的便捷性和自然性有了更高的追求…

【Unity3d】C#浮点数丢失精度问题

一、float、double浮点数丢失精度问题 Unity3D研究院之被坑了的浮点数的精度&#xff08;一百零三&#xff09; | 雨松MOMO程序研究院 https://segmentfault.com/a/1190000041768195?sortnewest 浮点数丢失精度问题是由于大部分浮点数在IEEE754规范下就是无法准确以二进制…

单元测试3.0+ @RunWith(JMockit.class)+mock+Expectations

Jmockit使用笔记_基本功能使用Tested_Injectable_Mocked_Expectations_jmockit.class-CSDN博客 测试框架Jmockit集合junit使用 RunWith(JMockit.class) 写在测试案例类上的注解 Tested 在测试案例中,写在我们要测试的类上面, 一般用实现类 Injectable 在测试案例中声明…

【复刻】数字化转型是否赋能企业新质生产力发展?(2015-2023年)

参照赵国庆&#xff08;2024&#xff09;的做法&#xff0c;对来自产业经济评论《企业数字化转型是否赋能企业新质生产力发展——基于中国上市企业的微观证据》一文中的基准回归部分进行复刻基于2015-2023年中国A股上市公司数据&#xff0c;实证分析企业数字化转型对新质生产力…

【数据仓库】hadoop3.3.6 安装配置

文章目录 概述下载解压安装伪分布式模式配置hdfs配置hadoop-env.shssh免密登录模式设置初始化HDFS启动hdfs配置yarn启动yarn 概述 该文档是基于hadoop3.2.2版本升级到hadoop3.3.6版本&#xff0c;所以有些配置&#xff0c;是可以不用做的&#xff0c;下面仅记录新增操作&#…

使用 CSS 的 `::selection` 伪元素来改变 HTML 文本选中时的背景颜色

定义 ::selection 伪元素&#xff1a; 在你的 CSS 文件中&#xff0c;添加 ::selection 伪元素&#xff0c;并设置 background-color 属性来改变选中文本的背景颜色。 示例代码&#xff1a; ::selection {background-color: yellow; /* 你可以根据需要更改颜色 */color: black…

【测试】接口测试

长期更新好文,建议关注收藏! 目录 接口规范接口测试用例设计postmanRequests封装接口自动化框架实例复习HTTP超文本传输协议 复习cookie+session 实现方式 1.工具 如postman ,JMeter(后者功能更全) 2.代码 python+requests / java+httpclient【高级】接口规范 传统接口 RE…

MATLAB关于集合的运算(部分)

集合运算比较两个集合中的元素&#xff0c;以找出共性或差异 i n t e r s e c t intersect intersect表示两组数据的交集 i s m e m b e r ismember ismember表示查找数据的集合成员 u n i o n union union表示两个数据集的并集 u n i q u e unique unique表示查找数据集的…

Postman[7] 内置动态参数及自定义的动态参数

postman 内置动态参数和自定义的动态参数 1.内置动态参数 格式&#xff1a;{{$参数名}} 1.1时间戳 {{$timestamp}} //生成当前时间的时间戳 1.2随机整数 {{$randomint}} //生成0-1000之间的随机数 1.3GUID字符串 {{$guid}} //生成随机GUID字符串 2.自定义动态参数 格式…

【C++】探索一维数组:从基础到深入剖析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;1. 什么是一维数组&#xff1f;一维数组的特点&#xff1a;示例 &#x1f4af;2. 一维数组的创建创建语法示例代码示例 1&#xff1a;创建整型数组示例 2&#xff1a;使用常…

为什么要用ZGC

一、为什么要用 ZGC 问题 我们有个“智慧园区”的项目,我们的下游系统“交叉带”[硬件系统]要求我们服务 60ms内返回结果&#xff0c;并且可用性要达到 99.99%。当时使用的是 G1垃圾回收器&#xff0c;单次 Young GC 40ms&#xff0c;一分钟10次&#xff0c;接口平均响应时间…

联通 路由器 创维SK-WR9551X 联通华盛VS010 组mesh 和 锐捷X32 PRO 无缝漫游

前言 联通路由器&#xff1a;联通创维SK-WR9551X&#xff0c;联通华盛VS010组mesh&#xff0c;并与锐捷X32 PRO混合组网&#xff0c;开启无限漫游。 1、mesh ≠ 无缝漫游 mesh是实现路由器快速组网的一种方式&#xff0c;通过mesh组网后可以实现无缝漫游。 mesh组网的设备要…