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

 更新时间:2020年06月24日 14:36:36   作者:Mae_Liu  
这篇文章主要介绍了如何使用Python处理HDF格式数据及可视化问题,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

原文链接: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处理HDF格式数据及可视化问题的文章就介绍到这了,更多相关Python处理HDF格式数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django中Forms的使用代码解析

    Django中Forms的使用代码解析

    这篇文章主要介绍了Django中Forms的使用代码解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • python常用操作之使用多个界定符(分隔符)分割字符串的方法实例

    python常用操作之使用多个界定符(分隔符)分割字符串的方法实例

    在使用Python处理字符串的时候,有时候会需要分割字符,下面这篇文章主要给大家介绍了关于python常用操作之使用多个界定符(分隔符)分割字符串的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Python opencv缺陷检测的实现及问题解决

    Python opencv缺陷检测的实现及问题解决

    这篇文章主要介绍了Python opencv缺陷检测的实现及问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python编程django实现同一个ip十分钟内只能注册一次

    Python编程django实现同一个ip十分钟内只能注册一次

    这篇文章主要介绍了Python编程django实现同一个ip十分钟内只能注册一次的相关内容,具有一定参考价值。需要的朋友可以了解下。
    2017-11-11
  • Python编程生成随机用户名及密码的方法示例

    Python编程生成随机用户名及密码的方法示例

    这篇文章主要介绍了Python编程生成随机用户名及密码的方法,结合实例形式分析了Python随机字符串的相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • python之多种方式传递函数方法案例讲解

    python之多种方式传递函数方法案例讲解

    这篇文章主要介绍了python之多种方式传递函数方法案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 10行Python代码就能实现的八种有趣功能详解

    10行Python代码就能实现的八种有趣功能详解

    Python凭借其简洁的代码,赢得了许多开发者的喜爱,因此也就促使了更多开发者用Python开发新的模块。面我们来看看,我们用不超过10行代码能实现些什么有趣的功能吧
    2022-03-03
  • Python封装数据库连接池详解

    Python封装数据库连接池详解

    这篇文章主要介绍了Python封装数据库连接池详解,文章围绕主题相关内容展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • 60行Python PyGame代码实现简单的迷宫游戏

    60行Python PyGame代码实现简单的迷宫游戏

    这篇文章主要为大家详细介绍如何通过了60行Python PyGame代码实现一个简单的迷宫游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2023-12-12
  • python利用元类和描述器实现ORM模型的详细步骤

    python利用元类和描述器实现ORM模型的详细步骤

    Python中的类与数据库之间的映射,对数据的操作就不用编写SQL语言了,因为都封装好了,比如你想插入一条数据,你就直接创建一个对象即可,下面通过本文学习下python利用元类和描述器实现ORM模型的详细步骤,感兴趣的朋友一起看看吧
    2021-11-11

最新评论