如何使用Python处理HDF格式数据及可视化问题

所属分类: 脚本专栏 / python 阅读数: 1013
收藏 0 赞 0 分享

原文链接: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等)格式数据。

安装

首先安装相关库

在这里插入图片描述

上述库均可以通过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)

在这里插入图片描述

某月全球闪电密度分布
上述示例基于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调用C/C++的方法解析

这篇文章主要介绍了Python调用C/C++的方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

学习Python爬虫的几点建议

这篇文章主要介绍了学习Python爬虫的几点建议,对新手学习爬虫有很大的帮助,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

Python创建临时文件和文件夹

这篇文章主要介绍了Python如何创建临时文件和文件夹,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

浅析Python 序列化与反序列化

这篇文章主要介绍了Python 序列化与反序列化的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

8种常用的Python工具

这篇文章主要介绍了8种常用的Python工具,帮助大家更好的学习Python,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

python爬虫使用requests发送post请求示例详解

这篇文章主要介绍了python爬虫使用requests发送post请求示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Python结合Window计划任务监测邮件的示例代码

这篇文章主要介绍了Python结合Window计划任务监测邮件的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Python用来做Web开发的优势有哪些

这篇文章主要介绍了Python用来做Web开发的优势有哪些,文中讲解非常细致,帮助大家更好的理解和学习Python,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

如何解决pycharm调试报错的问题

在本篇内容里小编给大家整理的是一篇关于如何解决pycharm调试报错的问题文章,需要的朋友们可以学习参考下。
收藏 0 赞 0 分享

基于logstash实现日志文件同步elasticsearch

这篇文章主要介绍了基于logstash实现日志文件同步elasticsearch,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多