如何使用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使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
May 15 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
详解python中executemany和序列的使用方法
Aug 12 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
Jan 14 Python
11个Python3字典内置方法大全与示例汇总
May 13 Python
matplotlib图例legend语法及设置的方法
Jul 28 Python
浅谈anaconda python 版本对应关系
Oct 07 Python
基于Python的接口自动化读写excel文件的方法
Jan 15 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
Feb 22 Python
Python+uiautomator2实现自动刷抖音视频功能
Apr 29 Python
在 Python 中利用 Pool 进行多线程
Apr 24 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解决约瑟夫环示例
2014/04/09 PHP
PHP session 会话处理函数
2016/06/06 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
JavaScript URL参数读取改进版
2009/01/16 Javascript
js控制div及网页相关属性的代码
2009/12/19 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
JavaScript ES6中const、let与var的对比详解
2017/06/18 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
python贪吃蛇游戏代码
2020/04/18 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
pycharm修改file type方式
2019/11/19 Python
基于python 取余问题(%)详解
2020/06/03 Python
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
会计专业推荐信
2013/10/29 职场文书
5.1手机促销活动
2014/01/17 职场文书
新闻传播专业求职信
2014/07/22 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
python双向链表实例详解
2022/05/25 Python