中国领先的IT技术网站
|
|

基于Python的Grib数据可视化

利用Python语言实现Grib数据可视化主要依靠三个库——pygrib、numpy和matplotlib。pygrib是欧洲中期天气预报中心的GRIG API C库的Python接口,通过这个库可以将Grib数据读取出来;numpy是Python的一种开源的数值计算扩展,这种工具可用来存储和处理大型矩阵;matplotlib是python著名的绘图库,十分适合交互式地进行制图。

作者:kallan来源:36大数据|2017-10-31 09:38

Tech Neo技术沙龙 | 11月25号,九州云/ZStack与您一起探讨云时代网络边界管理实践


基于Python的Grib数据可视化

利用Python语言实现Grib数据可视化主要依靠三个库——pygrib、numpy和matplotlib。pygrib是欧洲中期天气预报中心(ECMWF)的GRIG API C库的Python接口,通过这个库可以将Grib数据读取出来;numpy是Python的一种开源的数值计算扩展,这种工具可用来存储和处理大型矩阵;matplotlib是python著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图;在数据可视化过程中,我们常需要将数据在地图上画出来,所以还需要matplotlib的一个子包basemap,负责地图绘制。

一、库的安装

(一)matplotlib安装

  • matplotlib依赖
    • nose
    • numpy
    • pyparsing
    • python-dateutil
    • cycler
    • pkg-config
    • freetype
    • libpng
  • 安装过程

这里我都是通过源码包安装的,大家也可以再终端里通过pip install 命令来安装

1、安装nose

解压缩后,进入命令提示符 运行

  1. python3 setup.py install 

2、安装numpy

解压缩后,进入命令提示符 运行

  1. python3 setup.py install 

3、安装pyparsing

解压缩后,进入命令提示符 运行

  1. python3 setup.py install 

4、安装python-dateutil

解压缩后,进入命令提示符 运行

  1. python3 setup.py install 

5、安装cycler

解压缩后,进入命令提示符 运行

  1. python3 setup.py install 

6、安装pkg-config

  1. ./configure --with-intermal-glib 
  2.  
  3. make && date 
  4.  
  5. sudo make install && date  

7、安装freetype

  1. ./configure 
  2.  
  3. make && date 
  4.  
  5. sudo make install && date  

8、安装libpng

  1. ./configure 
  2.  
  3. make && date 
  4.  
  5. sudo make install && date  

9、安装matplotlib-1.5.0

解压缩后,进入命令提示符 运行

  1. python3 setup.py install 

(二)basemap安装

  • basemap依赖
    • geos
    • pyproj
  • 安装过程

1、安装GEOS

  1. ./configure 
  2.  
  3. make && date 
  4.  
  5. sudo make install && date  

2、安装pyproj

  1. python3 setup.py install 

3、安装basemap

  1. python3 setup.py install 

(三)pygrib安装

  • pygrib依赖
    • Jasper
    • GRIB API
    • numpy
    • pyproj
  • 安装过程

由于之前已经安装了numpy和pyproj,这里只需安装Jasper和GRIB API即可安装pygrib

1、安装Jasper

  1. ./configure 
  2.  
  3. make && date 
  4.  
  5. sudo make install && date  

2、安装GRIB API

  1. ./configure --with-jasper='/usr/local/' 
  2.  
  3. make && date 
  4.  
  5. sudo make install && date  

3、安装pygrib

安装pygrib之前首先要根据自己的实际情况修改文件目录下的setup.cfg文件,最主要的就是修改grib_api_dir和jasper_dir,这两个是刚刚安装的Jasper和GRIB API的路径,如果这两个地址不正确安装会报错

修改好就可以正常安装了

  1. python3 setup.py install 

二、grib数据读取

虽然我做的东西和气象沾边,但是我本身并不是气象专业出身,所有这些东西都是我慢慢研究琢磨出来的,所以有些方面可能讲的比较外行,有不对的地方欢迎大家留言指正。

(一)导入pygrib模块

  1. >>> import pygrib 

(二)打开Grib文件

  1. >>> grbs = pygrib.open('/Users/Kallan/Documents/data/echhae50.082'

(三)提取文件信息

  1. >>> grbs.seek(0) 
  2.  
  3. >>> for grb in grbs: 
  4.  
  5. grb 
  6.  
  7. 1:Geopotential Height:gpm (instant):regular_ll:isobaricInhPa:level 500:fcst time 24 :from 201507081200  

信息解读

1 :数据列表的行号,有的文件可能包括多个数据

Geopotential Height:数据的名称

gpm (instant):数据的单位

regular_ll:常规数据,其实这个字段我也不清楚

isobaricInhPa:这个字段表示的是数据属性,此处表示是以hPa为单位的等压面

level 500:这个字段表示的是高度层

fcst time 24 :预报时效

from 201507081200 :起报时间

综合上面的信息可以得出,这个文件是从2015年7月8日12时开始的24小时后500hPa等压面高度场数据

(四)导出文件数据

  1. >>> grb = grbs.select(name='Geopotential Height')[0] 
  2.  
  3. >>> data = grb.values 
  4.  
  5. >>> print(data.shape,data.min(),data.max()) 
  6.  
  7. (37, 37) 5368.6796875 5941.0390625 
  8.  
  9. >>> lat,lon=grb.latlons() 
  10.  
  11. >>> print(lat,'\n',lon) 
  12.  
  13. [[ 0. 0. 0. ..., 0. 0. 0. ] 
  14.  
  15. [ 2.5 2.5 2.5 ..., 2.5 2.5 2.5] 
  16.  
  17. [ 5. 5. 5. ..., 5. 5. 5. ] 
  18.  
  19. ..., 
  20.  
  21. [ 85. 85. 85. ..., 85. 85. 85. ] 
  22.  
  23. [ 87.5 87.5 87.5 ..., 87.5 87.5 87.5] 
  24.  
  25. [ 90. 90. 90. ..., 90. 90. 90. ]] 
  26.  
  27. [[-90. -87.5 -85. ..., -5. -2.5 0. ] 
  28.  
  29. [-90. -87.5 -85. ..., -5. -2.5 0. ] 
  30.  
  31. [-90. -87.5 -85. ..., -5. -2.5 0. ] 
  32.  
  33. ..., 
  34.  
  35. [-90. -87.5 -85. ..., -5. -2.5 0. ] 
  36.  
  37. [-90. -87.5 -85. ..., -5. -2.5 0. ] 
  38.  
  39. [-90. -87.5 -85. ..., -5. -2.5 0. ]]  

三、grib数据可视化

(一)导入需要的模块

  1. >>> import matplotlib.pyplot as plt 
  2.  
  3. >>> from mpl_toolkits.basemap import Basemap 
  4.  
  5. >>> import numpy as np  

(二)创建一个figure

  1. >>> plt.figure() 
  2.  
  3. <matplotlib.figure.Figure object at 0x107e65198>  

(三)创建一个basemap实例

  1. >>> m=Basemap(projection='mill',lat_ts=10,llcrnrlon=lon.min(), \ 
  2.  
  3. urcrnrlon=lon.max(),llcrnrlat=lat.min(),urcrnrlat=lat.max(), \ 
  4.  
  5. resolution='c'
  6.  
  7. >>> m.drawcoastlines(linewidth=0.25) 
  8.  
  9. <matplotlib.collections.LineCollection object at 0x1091c1f28> 
  10.  
  11. >>> m.drawcountries(linewidth=0.25) 
  12.  
  13. <matplotlib.collections.LineCollection object at 0x10621d0f0> 
  14.  
  15. >>> m.fillcontinents(color='coral',lake_color='aqua'
  16.  
  17. >>> m.drawmapboundary(fill_color='aqua'
  18.  
  19. <matplotlib.patches.Rectangle object at 0x10918b3c8> 
  20.  
  21. >>> m.drawmeridians(np.arange(0,360,30)) 
  22.  
  23. >>> m.drawparallels(np.arange(-90,90,30))  

(四)将lat,lon的数据格式转换成投影需要的格式存入x,y

  1. >>> x, y = m(lon,lat) 

(五)绘制等值线

  1. >>> cs = m.contour(x,y,data,15,linewidths=1.5) 

(六)命名并显示图像

  1. >>> plt.title('Geopotential Height Contour from Grib'
  2.  
  3. <matplotlib.text.Text object at 0x10918bda0> 
  4.  
  5. >>> plt.show()  

(七)图像展示

【编辑推荐】

  1. 大数据可以帮助企业获得资金吗?
  2. 别不相信 大数据已经侵入你生活的方方面面
  3. 2017年中国程序员调查分析:大数据就业前景广阔
  4. 大数据真的在云计算上的快车上吗?
  5. 大数据时代:十大最热门的大数据技术
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

SUN Solaris 9/10系统管理员认证指南

本书专门根据SUN官方的SCSA for Solaris 9&10考试大纲撰写而成,全面覆盖了SCSA for Solaris 9/10的认证考点,除此之外本书还有大量的非考...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× CTO训练营(深圳站)