当前位置: 首页 > 科技观察

基于Python的Grib数据可视化

时间:2023-03-14 23:45:28 科技观察

使用Python语言实现Grib数据可视化主要依赖三个库——pygrib、numpy和matplotlib。pygrib是欧洲中期天气预报中心(ECMWF)的GRIGAPIC库的Python接口,通过它可以读取Grib数据;numpy是Python的开源数值计算扩展,可用于存储和处理大型矩阵;matplotlib是python著名的绘图库,它提供了一套类似于matlab的命令API,非常适合交互式绘图;在数据可视化的过程中,我们经常需要将数据绘制在地图上,因此还需要matplotlib的一个子包basemap,它负责地图的绘制。一、库安装(一)matplotlib安装matplotlib依赖nosenumpypyparsingpython-dateutilcyclerpkg-configfreetypelibpng安装过程这里我是通过源码包安装的,也可以在终端通过pipinstall命令安装1安装nose解压后,进入命令提示符运行python3setup.pyinstall2,安装numpy并解压,进入命令提示符运行python3setup.pyinstall3,安装pyparsing并解压,进入命令提示符运行python3setup.pyinstall4,安装python-dateutiltodecompress压缩后进入命令提示符运行python3setup.pyinstall5,安装cycler解压后进入命令提示符运行python3setup.pyinstall6,安装pkg-config./configure--with-intermal-glibmake&&datesudomakeinstall&&date7,安装freetype./configuremake&&datesudomakeinstall&&date8,安装libpng./configuremake&&datesudomakeinstall&&date9,安装matplotlib-1.5.0解压后,进入命令提示符,运行python3setup.pyinstall(2)basemap安装basemap依赖geospyproj安装过程1、安装GEOS./configuremake&&datesudomakeinstall&&date2,安装pyprojpython3setup.pyinstall3,安装basemappython3setup.pyinstall(3)pygrib安装pygrib依赖JasperGRIBAPInumpypyproj安装过程由于之前已经安装了numpy和pyproj,这里只需要安装Jasper和GRIBAPI安装pygrib1,安装Jasper./configuremake&&datesudomakeinstall&&date2,安装GRIBAPI./configure--使用-jasper='/usr/local/'make&&datesudomakeinstall&&date3。安装pygrib在安装pygrib之前,首先要根据自己的实际情况修改文件目录下的setup.cfg文件。最重要的是修改grib_api_dir和jasper_dir,这是刚刚安装的Jasper和GRIBAPI的路径,如果这两个地址安装不正确会报错,修改后python3setup.pyinstall可以正常安装,这些都是我慢慢研究摸索出来的,所以有些方面可能比较外行,如果有不对的地方,请大家留言指正(1)导入pygrib模块>>>importpygrib(2)打开Grib文件>>>grbs=pygrib.open('/Users/Kallan/Documents/data/echhae50.082')(3)提取文件信息>>>grbs.seek(0)>>>forgrbinrbs:grb1:GeopotentialHeight:gpm(instant):regular_ll:isobaricInhPa:level500:fcsttime24:from201507081200信息解读1:数据列表行号,部分文件可能包含多个数据GeopotentialHeight:datagpm(instant)的名称:数据的单位regular_ll:常规数据,其实我不知道这个字段代表是高度层fcsttime24:预报时效从201507081200:开始上报时间从以上信息可以看出,该文件是7月8日12:00起24小时后的500hPa等压面高度场数据,2015(四)导出文件数据>>>grb=grbs.select(name='GeopotentialHeight')[0]>>>data=grb.values>>>print(data.shape,data.min(),data.max())(37,37)5368.67968755941.0390625>>>lat,lon=grb.latlons()>>>print(lat,'\n',lon)[[0.0.0....,0.0.0.][2.52.52.5...,2.52.52.5][5.5.5....,5.5.5.]...,[85.85.85.....,85.85.85.][87.587.587.5..,87.587.587.5][90.90.90..,90.90.90.]][[-90.-87.5-85....,-5.-2.50.][-90.-87.5-85....,-5.-2.50.][-90.-87.5-85..,-5.-2.50.]...,[-90.-87.5-85.....,-5.-2.50.][-90.-87.5-85.....,-5.-2.50.][-90.-87.5-85..,-5.-2.50.]]三、grib数据可视化(1)导入所需模块>>>importmatplotlib.pyplotasplt>>>frommpl_toolkits.basemapimportBasemap>>>importnumpyasnp(2)创建图>>>plt.figure()(3)创建底图实例>>>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)>>>m.drawcountries(linewidth=0.25)>>>m.fillcontinents(color='coral',lake_color='aqua')>>>m.drawmapboundary(fill_color='aqua')>>>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)(6)命名并显示图像>>>plt.title('GeopotentialHeightContourfromGrib')>>>plt.show()(7)图像显示