爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 78006|回复: 52

[经验总结] python FY2E卫星HDF5格式的TBB数据画图

  [复制链接]

新浪微博达人勋

发表于 2017-9-29 14:13:51 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
1、数据为国家卫星中心下载的HDF5是全球标称数据,2288*2288的格点2、每个格点对应一个一个经纬度。对应的经纬度数据文件可在卫星中心下载
3、读取hdf5数据使用h5py库
4、cmap为使用ncl的色标,论坛里有,自行查找
  1. import h5py
  2. import cmaps
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from mpl_toolkits.basemap import Basemap



  6. # read hdf5 file
  7. f = h5py.File('data/FY2E_TBB_IR1_NOM_20170912_1030.hdf','r')
  8. # 查看文件信息
  9. # print(list(f.keys()))
  10. data = f.get('FY2E TBB Hourly Product')
  11. # print(list(data.attrs.items()))
  12. data = np.array(data)
  13. '''
  14. 处理缺值,数据里有效数据的最大值为340,最小为160
  15. print(list(data.attrs.items()))即可查看
  16. '''
  17. data = np.ma.masked_outside(data,160,340)
  18. info = f.get('NomFileInfo')[0]
  19. '''
  20. 卫星的中心经度 info[4]
  21. 中心纬度为0
  22. '''
  23. lonCenter = info[4]
  24. # read lonlat msg
  25. loc = np.fromfile('data/NOM_ITG_2288_2288(0E0N)_LE.dat',dtype=np.float32,count=-1)
  26. latlon = loc.reshape(2,2288,2288)
  27. lon = np.array(latlon[0]+lonCenter)
  28. lat = np.array(latlon[1])
  29. '''
  30. 经纬度信息里300为缺值
  31. '''
  32. lon = np.ma.masked_where(lon>300,lon)
  33. lat = np.ma.masked_values(lat,300)
  34. # 画图
  35. fig = plt.figure(figsize=(18.5, 10.5))
  36. m=Basemap(projection='cyl',llcrnrlat=10,llcrnrlon=90,urcrnrlat=35,urcrnrlon=140)
  37. m.drawcoastlines(color='blue')
  38. m.drawstates(color='blue')
  39. m.drawcountries(color='blue')
  40. x,y = m(lon, lat) # 将lats / lons转换为地图投影坐标
  41. cf = m.contourf(x,y,data,levels=np.linspace(np.min(data),np.max(data),400),cmap=cmaps.MPL_RdGy )
  42. cbar = m.colorbar(cf ,location='right',size='3%' ,pad='2%')
  43. cbar.set_label('Brightness Temperature ( K )', fontsize=12, fontweight='bold')
  44. m.drawmeridians(np.arange(90, 140, 5),labels=[0, 0, 0, 1])
  45. m.drawparallels(np.arange(10, 35, 5),labels=[1, 0, 0, 0])
  46. plt.title('Brightness Temperature(20170912_1030) ',fontweight='bold', fontsize=14)
  47. plt.savefig('test.png')
  48. plt.show()
复制代码


test.png

NOM_ITG_2288_2288(0E0N)_LE.dat

39.94 MB, 下载次数: 1407, 下载积分: 金钱 -5

经纬度信息数据

FY2E_TBB_IR1_NOM_20170912_1030.hdf

19.98 MB, 下载次数: 563, 下载积分: 金钱 -5

HDF数据文件

评分

参与人数 5金钱 +43 贡献 +5 收起 理由
sxq728 + 20 + 1 很给力!
沈珩之 + 3 很给力!
gioleely + 1
funnybone + 1 赞一个!
又是那隻貓 + 18 + 4

查看全部评分

本帖被以下淘专辑推荐:

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-9-29 20:12:30 来自手机 | 显示全部楼层
想问一下,出的图的格式是什么,可以直接附在论文上么
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-9-30 07:14:04 | 显示全部楼层
tulalang 发表于 2017-9-29 20:12
想问一下,出的图的格式是什么,可以直接附在论文上么

上面出图为png  matplotlib可以出位图和矢量图,矢量图能满足出版的的要求
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-9-30 07:16:54 | 显示全部楼层
地图不规范,有解决方案吗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-9-30 07:35:35 | 显示全部楼层
wade 发表于 2017-9-30 07:16
地图不规范,有解决方案吗

可以加载自己的shapefile文件
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-9-30 11:53:20 | 显示全部楼层
chiqu296 发表于 2017-9-30 07:14
上面出图为png  matplotlib可以出位图和矢量图,矢量图能满足出版的的要求

那确实很方便。。。赶紧学习python~谢谢楼主的帖子和回复了~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-10-1 16:17:11 | 显示全部楼层
赞!就是python自带的地图有点粗
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-10-2 15:43:05 | 显示全部楼层
小其其格 发表于 2017-10-1 16:17
赞!就是python自带的地图有点粗

是的,而且python自带的中国地图国界是不标准的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-10-4 06:56:32 | 显示全部楼层
平流层的萝卜 发表于 2017-10-2 15:43
是的,而且python自带的中国地图国界是不标准的。

cmaps我在ubuntu下怎么安装不成功呀!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-10-4 07:33:21 | 显示全部楼层
谢谢楼主分享
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表