如何使用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 学习笔记
Dec 27 Python
详解在Python和IPython中使用Docker
Apr 28 Python
wxPython中listbox用法实例详解
Jun 01 Python
python自带的http模块详解
Nov 06 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
python中文编码与json中文输出问题详解
Aug 24 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
python获取array中指定元素的示例
Nov 26 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
Sep 28 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
Python如何用re模块实现简易tokenizer
May 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
图书管理程序(一)
2006/10/09 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
React组件中的this的具体使用
2018/02/28 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
Flask框架web开发之零基础入门
2018/12/10 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
linux环境下Django的安装配置详解
2019/07/22 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
如何清空python的变量
2020/07/05 Python
学前教育毕业生自荐信范文
2013/12/24 职场文书
优秀小学生家长评语
2014/01/30 职场文书
社会实践的活动方案
2014/08/22 职场文书
庆七一晚会主持词
2015/06/30 职场文书
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
Python find()、rfind()方法及作用
2022/12/24 Python