如何使用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使用win32com库播放mp3文件的方法
May 30 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
django启动uwsgi报错的解决方法
Apr 08 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
python 同时读取多个文件的例子
Jul 16 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 Python
如何使用python传入不确定个数参数
Feb 18 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
Python pyecharts绘制条形图详解
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中的日期及时间
2006/11/23 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
php Session存储到Redis的方法
2013/11/04 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
巧妙破除网页右键禁用的十大绝招
2006/08/12 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
python中的列表推导浅析
2014/04/26 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
python 星号(*)的多种用途
2020/09/21 Python
python 获取计算机的网卡信息
2021/02/18 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
高级销售员求职信
2013/10/25 职场文书
银行求职自荐信
2014/06/30 职场文书
党委班子剖析材料
2014/08/21 职场文书
党支部创先争优公开承诺书
2015/04/30 职场文书
运动会200米广播稿
2015/08/19 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python