如何使用Python处理HDF格式数据及可视化问题


Posted in Python onJune 24, 2020

原文链接:https://blog.csdn.net/Fairy_Nan/article/details/105914203

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

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

安装

首先安装相关库

如何使用Python处理HDF格式数据及可视化问题

上述库均可以通过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)

如何使用Python处理HDF格式数据及可视化问题

某月全球闪电密度分布
上述示例基于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了解。

如何使用Python处理HDF格式数据及可视化问题

总结

到此这篇关于如何使用Python处理HDF格式数据及可视化问题的文章就介绍到这了,更多相关Python处理HDF格式数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python pickle模块用法实例
Apr 14 Python
Python 自动刷博客浏览量实例代码
Jun 14 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
python的re正则表达式实例代码
Jan 24 Python
python实现求解列表中元素的排列和组合问题
Mar 15 Python
VSCode下好用的Python插件及配置
Apr 06 Python
python实现简易内存监控
Jun 21 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
Python如何生成xml文件
Jun 04 Python
Python自动发送和收取邮件的方法
Aug 12 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
pytorch SENet实现案例
Jun 24 #Python
利用PyTorch实现VGG16教程
Jun 24 #Python
python安装读取grib库总结(推荐)
Jun 24 #Python
Pytorch mask-rcnn 实现细节分享
Jun 24 #Python
在Pytorch中使用Mask R-CNN进行实例分割操作
Jun 24 #Python
OpenCV+python实现实时目标检测功能
Jun 24 #Python
基于Python下载网络图片方法汇总代码实例
Jun 24 #Python
You might like
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
微信小程序 toast 详解及实例代码
2016/11/09 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
Angular6封装http请求的步骤详解
2018/08/13 Javascript
vue模式history下在iis中配置流程
2019/04/17 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
Python 文件操作实现代码
2009/10/07 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
python爬取音频下载的示例代码
2020/10/19 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
澳大利亚相机之家:Camera House
2017/11/30 全球购物
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
车间主任岗位职责
2014/03/16 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
大学班干部竞选稿
2015/11/20 职场文书
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server