HDF也是一种自描述格式文件,主要用于存储和分发科学数据。气象领域中卫星数据经常使用此格式,比如MODIS,OMI,LIS/OTD等卫星产品。对HDF格式细节感兴趣的可以Google了解一下。

这一次呢还是以Python为主,来介绍如何处理HDF格式数据。Python中有不少库都可以用来处理HDF格式数据,比如h5py可以处理HDF5格式(pandas中 read_hdf 函数),pyhdf可以用来处理HDF4格式。此外,gdal也可以处理HDF(NetCDF,GRIB等)格式数据。

安装

首先安装相关库

conda install pyhdfconda install h5py

上述库均可以通过conda包管理器进行安装,如果conda包管理器无法安装,对于windows系统,可以查找是否存在已打包的安装包,而unix系统可以通过源码编译安装。

数据处理和可视化

以LIS/OTD卫星闪电成像数据为例,处理HDF4格式数据并进行绘图:

import numpy as np import matplotlib.pyplot as plt from matplotlib import cm, colors import seaborn as sns import cartopy.crs as ccrs from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter from pyhdf.SD import SD, SDC sns.set_context('talk', font_scale=1.3) data = SD('LISOTD_LRMTS_V2.3.2014.hdf', SDC.READ) lon = data.select('Longitude') lat = data.select('Latitude') flash = data.select('LRMTS_COM_FR') # 设置colormap collev= ['#ffffff', '#ab18b0', '#07048f', '#1ba01f', '#dfdf18', '#e88f14', '#c87d23', '#d30001', '#383838'] levels = [0, 0.01, 0.02, 0.04, 0.06, 0.1, 0.12, 0.15, 0.18, 0.2] cmaps = colors.ListedColormap(collev, 'indexed') norm = colors.BoundaryNorm(levels, cmaps.N) proj = ccrs.PlateCarree() fig, ax = plt.subplots(figsize=(16, 9), subplot_kw=dict(projection=proj)) LON, LAT= np.meshgrid(lon[:], lat[:]) con = ax.contourf(LON, LAT, flash[:, :, 150], cmap=cmaps, norm=norm, levels=levels, extend='max') cb = fig.colorbar(con, shrink=0.75, pad=0.02) cb.cmap.set_over('#000000') cb.ax.tick_params(direction='in', length=5) ax.coastlines() ax.set_xticks(np.linspace(-180, 180, 5), crs=proj) ax.set_yticks(np.linspace(-90, 90, 5), crs=proj) lon_formatter= LongitudeFormatter(zero_direction_label=True) lat_formatter= LatitudeFormatter() ax.xaxis.set_major_formatter(lon_formatter) ax.yaxis.set_major_formatter(lat_formatter)

某月全球闪电密度分布

上述示例基于pyhdf进行HDF4格式数据处理和可视化,HDF4文件中包含的变量和属性获取方式见文末的Notebook,其中给出了更详细的示例。

以下基于h5py读取HDF5格式数据,以OMI卫星O3数据为例:

import h5py data = h5py.File('TES-Aura_L3-O3-M2005m07_F01_10.he5') lon = data.get('/HDFEOS/GRIDS/NadirGrid/Data Fields/Longitude').value lat = data.get('/HDFEOS/GRIDS/NadirGrid/Data Fields/Latitude').value o3 = data.get('/HDFEOS/GRIDS/NadirGrid/Data Fields/O3').value proj = ccrs.PlateCarree() fig, ax = plt.subplots(figsize=(16, 9), subplot_kw=dict(projection=proj)) LON, LAT = np.meshgrid(lon[:], lat[:]) con = ax.contourf(LON, LAT, o3[10, :, :]*1e6, np.arange(0, 8.01, 0.1), vmin=0, vmax=8, cmap=cm.RdGy_r) ax.coastlines() ax.set_xticks(np.linspace(-180, 180, 5), crs=proj) ax.set_yticks(np.linspace(-90, 90, 5), crs=proj) lon_formatter = LongitudeFormatter(zero_direction_label=True) lat_formatter = LatitudeFormatter() ax.xaxis.set_major_formatter(lon_formatter) ax.yaxis.set_major_formatter(lat_formatter) cb = fig.colorbar(con, shrink=0.75, pad=0.02) cb.set_ticks(np.arange(0, 8.01, 1)) cb.ax.tick_params(direction='in', length=5)

上述示例中使用类似unix中路径的方式获取相关变量,这在HDF格式数据中称为Groups。不同的组可以包含子组,从而形成类似嵌套的形式。详细的介绍可Google了解。

某时刻某高度层全球O3浓度分布

数据和代码见文末Notebook链接,文末Notebook中除了上述基于pyhdf和h5py的示例外,还给出了基于gdal处理HDF4和HDF5格式数据的示例。


Notebook链接:https://pan.baidu.com/s/1WD8OD3vUuISIB5Os_T8-vw


往期回顾

气象数据的常用格式以及处理的工具

Grib格式数据处理

使用Python处理NetCDF格式文件

数据处理利器pandas入门

lsdyna如何设置set中的node_list_如何使用Python处理HDF格式数据相关推荐

  1. lsdyna如何设置set中的node_list_详解MySQL数据库如何实现类似Oracle的序列?

    概述 众所周知,Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的. 不过小编在实际使用过程中发现,MySQL的自增长有诸多的 ...

  2. lsdyna如何设置set中的node_list_如何为3CX配置Gigaset N670 N870 IP PRO

    支持的型号:Gigaset DECT系列和无绳话机 Gigaset DECT系列 Gigaset N670 IP PRO-最低固件版本2.16.2 Gigaset N870 IP PRO-最低固件版本 ...

  3. lsdyna如何设置set中的node_list_为 Windows PowerShell 设置 User Alias (命令别名)

    本文章转自个人博客 https://blog.vvzero.com, 转载请注明出处. 直接看步骤的话,在最下方. 背景 Windows Terminal 虽然还处于预览阶段,但是也出来很长一段时间了 ...

  4. lsdyna如何设置set中的node_list_如何理解vue的双向绑定

    vue前端框架,已经越来越多的在各大小型公司被使用,其相对于其他两大框架的优点是上手容易,数据交互友好,不担心dom操作,渐进式框架适合开发者自己的需求.对于vue来说,最重要的概念无非是数据的双向绑 ...

  5. lsdyna如何设置set中的node_list_如何快速掌握es6+新特性及核心语法?

    国庆刚刚结束,我们开始一波新的学习进程吧. ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.作为前端必备技能,我们来快速开始吧 接 ...

  6. lsdyna如何设置set中的node_list_如何使用定速巡航功能 图文解说一看就会!

    定速巡航系统可以对车辆进行设置,使车辆以设定的车速恒速行驶.特别是在高速路上长距离行驶时,可以解放驾驶员的右脚,降低驾驶员的疲劳感.同时,由于车辆以恒定的车速行驶,减少了车速的变化,可以有效的提升燃油 ...

  7. lsdyna如何设置set中的node_list_如何安装使用最帅Linux系统监控工具

    作者:Linux迷 链接:https://www.linuxmi.com/netdata-ubuntu.html Netdata是一个免费的开源实时监视和故障排除工具,用于云服务器,容器,应用程序和本 ...

  8. lsdyna如何设置set中的node_list_技术成长日记-Vim-3.Vim中重要的概念

    3.1 配置文件.vimrc或_vimrc .vimrc文件是个人定制Vim的脚本文件,该文件中的每一行都会被当作Ex命令在Vim进行初始化的时候执行.一般在类Unix系统中把该文件存放在$HOME/ ...

  9. lsdyna如何设置set中的node_list_关于如何快速调教NGINX的几点总结

    关于如何快速调教Nginx的几点总结 关于Nginx的好与坏,我觉得没有必要去介绍了,在这里主要分享一下我在实际的项目部署中是如何快速的调教Nginx的.其中分享的源码大家可以作为模板代码,根据自身项 ...

最新文章

  1. 数据分析及机器学习环境配置(docker极简入门指南)
  2. spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包
  3. Windows上同时安装两个数据库
  4. 优秀Python学习资源收集汇总(强烈推荐)
  5. raspberry pi_通过串行蓝牙从Raspberry Pi传感器单元发送数据
  6. 第二篇:对CART,Gradient Boost,Xgboost,LightGBM的学习
  7. 2021二维数组中的元素查重(C++,stl--set)
  8. 年总结(二):历经一年的蜕变
  9. java写原生js_[Java教程]原生JS拖拽
  10. python正则表达式匹配多字符(一)
  11. VARCHART XGantt 应用程序支持简介
  12. c语言编程a4988驱动步进电机,A4988驱动NEMA步进电机(42步进电机)
  13. 微软云服务Azure所有产品简介
  14. 超人再起 Superman Returns
  15. python数据驱动参数化登录_HttpRunner 参数化数据驱动
  16. 离线地图for arcgis tpk
  17. c语言中判断c是否为小写字母,C语言判断英文字符大小写的方法
  18. JVM和操作系统的关系是什么?
  19. 去哪找到高薪工作怎么找
  20. 什么是readout function/readout函数

热门文章

  1. 【FAQ】应用集成HMS Core部分服务出现“ 6003报错”情况的解决方法来啦
  2. 汇编语言的基础知识一
  3. 石墨笔记, Onenote 和 Effie 哪个适合单口或脱口秀作者?
  4. Java后端处理video快进快退播放以及断点续传的原理和代码
  5. java记录日志不打印控制台,java异常在控制台和日志里面的打印记录
  6. React Native 启动流程 源码剖析
  7. Spring Boot基于KLock实现分布式锁的使用详解(一)
  8. linux c 语言uint32 t,Linux中uint16_t
  9. hypermesh和lsdyna联合仿真计算某汽车座椅进行的头冲吸能实验
  10. 使用Synopsys VCS使用constraint遇到的一个奇怪问题