基于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
解压缩后,数视化进入命令提示符 运行
python3 setup.py install2、基于据安装numpy
解压缩后,进入命令提示符 运行
python3 setup.py install3、安装pyparsing
解压缩后,进入命令提示符 运行
python3 setup.py install4、香港云服务器安装python-dateutil
解压缩后,进入命令提示符 运行
python3 setup.py install5、安装cycler
解压缩后,进入命令提示符 运行
python3 setup.py install6、安装pkg-config
./configure --with-intermal-glib make && date sudo make install && date7、安装freetype
./configure make && date sudo make install && date8、安装libpng
./configure make && date sudo make install && date9、安装matplotlib-1.5.0
解压缩后,进入命令提示符 运行
python3 setup.py install(二)basemap安装
basemap依赖 geos pyproj 安装过程1、安装GEOS
./configure make && date sudo make install && date2、安装pyproj
python3 setup.py install3、安装basemap
python3 setup.py install(三)pygrib安装
pygrib依赖 Jasper GRIB API numpy pyproj 安装过程由于之前已经安装了numpy和pyproj,这里只需安装Jasper和GRIB API即可安装pygrib
1、安装Jasper
./configure make && date sudo make install && date2、安装GRIB API
./configure --with-jasper=/usr/local/ make && date sudo make install && date3、安装pygrib
安装pygrib之前首先要根据自己的实际情况修改文件目录下的setup.cfg文件,最主要的就是修改grib_api_dir和jasper_dir,这两个是刚刚安装的Jasper和GRIB API的路径,如果这两个地址不正确安装会报错
修改好就可以正常安装了
python3 setup.py install二、grib数据读取
虽然我做的东西和气象沾边,但是我本身并不是气象专业出身,云服务器所有这些东西都是我慢慢研究琢磨出来的,所以有些方面可能讲的比较外行,有不对的地方欢迎大家留言指正。
(一)导入pygrib模块
>>> import pygrib(二)打开Grib文件
>>> grbs = pygrib.open(/Users/Kallan/Documents/data/echhae50.082)(三)提取文件信息
>>> grbs.seek(0) >>> for grb in grbs: grb 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等压面高度场数据
(四)导出文件数据
>>> grb = grbs.select(name=Geopotential Height)[0] >>> data = grb.values >>> print(data.shape,data.min(),data.max()) (37, 37) 5368.6796875 5941.0390625 >>> lat,lon=grb.latlons() >>> print(lat,\n,lon) [[ 0. 0. 0. ..., 0. 0. 0. ] [ 2.5 2.5 2.5 ..., 2.5 2.5 2.5] [ 5. 5. 5. ..., 5. 5. 5. ] ..., [ 85. 85. 85. ..., 85. 85. 85. ] [ 87.5 87.5 87.5 ..., 87.5 87.5 87.5] [ 90. 90. 90. ..., 90. 90. 90. ]] [[-90. -87.5 -85. ..., -5. -2.5 0. ] [-90. -87.5 -85. ..., -5. -2.5 0. ] [-90. -87.5 -85. ..., -5. -2.5 0. ] ..., [-90. -87.5 -85. ..., -5. -2.5 0. ] [-90. -87.5 -85. ..., -5. -2.5 0. ] [-90. -87.5 -85. ..., -5. -2.5 0. ]]三、grib数据可视化
(一)导入需要的模块
>>> import matplotlib.pyplot as plt >>> from mpl_toolkits.basemap import Basemap >>> import numpy as np(二)创建一个figure
>>> plt.figure() <matplotlib.figure.Figure object at 0x107e65198>(三)创建一个basemap实例
>>> m=Basemap(projection=mill,lat_ts=10,llcrnrlon=lon.min(), \ urcrnrlon=lon.max(),llcrnrlat=lat.min(),urcrnrlat=lat.max(), \ resolution=c) >>> m.drawcoastlines(linewidth=0.25) <matplotlib.collections.LineCollection object at 0x1091c1f28> >>> m.drawcountries(linewidth=0.25) <matplotlib.collections.LineCollection object at 0x10621d0f0> >>> m.fillcontinents(color=coral,lake_color=aqua) >>> m.drawmapboundary(fill_color=aqua) <matplotlib.patches.Rectangle object at 0x10918b3c8> >>> m.drawmeridians(np.arange(0,360,30)) >>> m.drawparallels(np.arange(-90,90,30))(四)将lat,lon的数据格式转换成投影需要的格式存入x,y
>>> x, y = m(lon,lat)(五)绘制等值线
>>> cs = m.contour(x,y,data,15,linewidths=1.5)(六)命名并显示图像
>>> plt.title(Geopotential Height Contour from Grib) <matplotlib.text.Text object at 0x10918bda0> >>> plt.show()(七)图像展示