交流群:462197261站长百科站长论坛热门标签收藏本站北冥有鱼 互联网前沿资源第一站 助力全行业互联网+
点击这里给我发消息
  • 当前位置:
  • 如何使用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格式数据内容请搜索北冥有鱼以前的文章或继续浏览下面的相关文章希望大家以后多多支持北冥有鱼!


    广而告之:
    热门推荐:
    浅谈keras保存模型中的save()和save

    今天做了一个关于keras保存模型的实验,希望有助于大家了解keras保存模型的区别。 我们知道keras的模型一般保存为后缀名为h5的文件,比如final_model.h5。同样是h5文件用save()和save_weight()保存效果是不一样的。 我们用宇宙最通用的数据集MNIST来做这个实验,首先设计一个两···

    javascript入门之string对象【新手必看】

    一、String 对象     String 对象用于处理文本(字符串)。 二、构造函数   new String(value)    //构造函数   function String(value)  //转换函数 三、属性   length  该字符串中的字符数 var str = new String("abcdefg"); docu···

    日常微调SEO优化工作有助于提高你的网站在搜索引擎中的竞争力

    在日常网站搜索引擎优化中应该做些什么调整,常常是公司关注的一个话题。大多数公司都希望自己的网站能够获得良好的排名,但他们并不总能满足人们的期望。因为搜索引擎优化是一个参与性和战略性的过程,并不是每一个搜索引擎优化的变化都会有一个困难的变化。做一些小的和重要···

    关于PHP转换超过2038年日期出错的问题解决

    前言 最近在写一个项目接口。测试中发现服务器上测试正常的功能,在本地一直有问题。一步步的排查,最终锁定问题是由于函数strtotime返回了一个false值,导致数据插入数据库失败。 相同代码运行结果不一样,原因那就是环境不一致导致。要么是PHP版本不同,要么是位数不同。 我···

    .html 、.htm 、 .shtml 以及 .shtm 四种扩展名的文件区别

    很多朋友刚开始接触网页制作,发现这么多扩张名,其实htm与html都是一样的,shtm与shtml也是一样的,注意,为了网站优化建议使用一样的后缀名,基本上对于访问者来说html与htm可以是两个不同的内容。 .htm VS .html 首先来看 .htm 和 .html 文件的区别。答案居然是:它们是相···

    教大家轻松制作Bootstrap漂亮表格(table)

    学习了runoob.com网站中的bootstrap内容之后,参照其中的内容自己做一下总结,以便帮助在这方面有疑惑的朋友,也有助于自己更好的消化所学的内容。 我们应该庆幸自己活在这样一个互联网时代,开放、共享。很多之前我们费尽心思去实现的效果已经有前辈为我们总结出来并做成很好···

    页面点击小红心js实现代码

    效果图 核心代码 love.js !function(e,t,a){function n(){c(".heart{width: 10px;height: 10px;position: fixed;background: #f00;transform: rotate(45deg);-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);}.heart:after,.heart:before{content: '';width···

    解读ASP.NET 5 & MVC6系列教程(6):Middleware详解

    在第1章项目结构分析中,我们提到Startup.cs作为整个程序的入口点,等同于传统的Global.asax文件,即:用于初始化系统级的信息(例如,MVC中的路由配置)。本章我们就来一一分析,在这里如何初始化这些系统级的信息。 新旧版本之间的Pipeline区别 ASP.NET 5和之前版本的最大区···

    ASP.NET中母版页和shtml实例入门

    本文较为深入浅出的分析了ASP.NET中母版页和shtml。分享给大家供大家参考。具体分析如下: 母版页 创建和使用母版页: 1. 创建Webform的母版页(MasterPage) 2. 创建使用母版页的窗体(ContentPage)。 3. 母版页使用ContentPlaceHolder挖坑,“使用母版页的窗体”用Content填坑 ···

    jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法

    本文实例讲述了jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法。分享给大家供大家参考。具体实现方法如下: 这里主要通过val方法设置按钮的文字,并用attr方法修改disabled属性实现该功能。 主要代码如下: <html> <body> <form method="get" acti···