如何使用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基础教程之基本内置数据类型介绍
Feb 20 Python
python实现进程间通信简单实例
Jul 23 Python
Python遍历指定文件及文件夹的方法
May 09 Python
Python实现将DOC文档转换为PDF的方法
Jul 25 Python
python RabbitMQ 使用详细介绍(小结)
Nov 08 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
python数据挖掘需要学的内容
Jun 23 Python
Django中使用session保持用户登陆连接的例子
Aug 06 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
Python 通过监听端口实现唯一脚本运行方式
May 05 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 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
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
PHP中读写文件实现代码
2011/10/20 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
vue实现按钮切换图片
2021/01/20 Vue.js
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python解析树及树的遍历
2016/02/03 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
python 删除非空文件夹的实例
2018/04/26 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
Python基于Faker假数据构造库
2020/11/30 Python
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
网络工程师的自我评价
2013/10/02 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
高考1977观后感
2015/06/04 职场文书
立案决定书范文
2015/06/24 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
Python获取字典中某个key的value
2022/04/13 Python