如何使用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 判断是否为正小数和正整数的实例
Jul 23 Python
基于python log取对数详解
Jun 08 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
python多进程实现文件下载传输功能
Jul 28 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
Python 实现微信防撤回功能
Apr 29 Python
Python Django 前后端分离 API的方法
Aug 28 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
Apr 20 Python
Django Form常用功能及代码示例
Oct 13 Python
django inspectdb 操作已有数据库数据的使用步骤
Feb 07 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 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与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
JS数组方法concat()用法实例分析
2020/01/18 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
python实现简单登陆流程的方法
2018/04/22 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
python实现维吉尼亚加密法
2019/03/20 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
有个性的自我评价范文
2013/11/15 职场文书
自行车广告词大全
2014/03/21 职场文书
经济担保书范文
2014/04/02 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android