最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

基于Python的Grib数据可视化

[复制链接]
跳转到指定楼层
楼主
发表于 2017-11-1 10:54:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

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

x
作者:kallan
利用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 install
2、安装numpy
解压缩后,进入命令提示符 运行
  python3 setup.py install
3、安装pyparsing
解压缩后,进入命令提示符 运行
  python3 setup.py install
4、安装python-dateutil
解压缩后,进入命令提示符 运行
  python3 setup.py install
5、安装cycler
解压缩后,进入命令提示符 运行
  python3 setup.py install
6、安装pkg-config
   
[AppleScript] 纯文本查看 复制代码
./configure --with-intermal-glib
 make && date
 sudo make install && date

7、安装freetype
  
[AppleScript] 纯文本查看 复制代码
./configure
  make && date
  sudo make install && date

8、安装libpng
   
[AppleScript] 纯文本查看 复制代码
  ./configure
 make && date
 sudo make install && date

9、安装matplotlib-1.5.0
解压缩后,进入命令提示符 运行
1 python3 setup.py install
(二)basemap安装
  • basemap依赖


  • geos
  • pyproj

  • 安装过程
1、安装GEOS
[AppleScript] 纯文本查看 复制代码
  ./configure
 make && date
 sudo make install && date
   



2、安装pyproj
   python3 setup.py install
3、安装basemap
   python3 setup.py install
(三)pygrib安装
  • pygrib依赖
  • Jasper
  • GRIB API
  • numpy
  • pyproj

  • 安装过程
由于之前已经安装了numpy和pyproj,这里只需安装Jasper和GRIB API即可安装pygrib
1、安装Jasper
  
[AppleScript] 纯文本查看 复制代码
./configure
 make && date
 sudo make install && date



2、安装GRIB API
[AppleScript] 纯文本查看 复制代码
  ./configure --with-jasper='/usr/local/'
  make && date
 sudo make install && date


3、安装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')
    (三)提取文件信息1
  
[AppleScript] 纯文本查看 复制代码
>>> 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等压面高度场数据
(四)导出文件数据
[AppleScript] 纯文本查看 复制代码
 1 >>> grb = grbs.select(name='Geopotential Height')[0]
 2 >>> data = grb.values
 3 >>> print(data.shape,data.min(),data.max())
 4 (37, 37) 5368.6796875 5941.0390625
 5 >>> lat,lon=grb.latlons()
 6 >>> print(lat,'\n',lon)
 7 [[  0.    0.    0.  ...,   0.    0.    0. ]
 8 [  2.5   2.5   2.5 ...,   2.5   2.5   2.5]
 9 [  5.    5.    5.  ...,   5.    5.    5. ]
10 ...,
11 [ 85.   85.   85.  ...,  85.   85.   85. ]
12 [ 87.5  87.5  87.5 ...,  87.5  87.5  87.5]
13 [ 90.   90.   90.  ...,  90.   90.   90. ]]
14 [[-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]
15 [-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]
16 [-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]
17 ...,
18 [-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]
19 [-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]
20 [-90.  -87.5 -85.  ...,  -5.   -2.5   0. ]]

三、grib数据可视化
(一)导入需要的模块
[AppleScript] 纯文本查看 复制代码
1 >>> import matplotlib.pyplot as plt
2 >>> from mpl_toolkits.basemap import Basemap
3 >>> import numpy as np

(二)创建一个figure


[AppleScript] 纯文本查看 复制代码
1 >>> plt.figure()
2 <matplotlib.figure.Figure object at 0x107e65198>


(三)创建一个basemap实例
[AppleScript] 纯文本查看 复制代码
 1 >>> m=Basemap(projection='mill',lat_ts=10,llcrnrlon=lon.min(), \
 2  urcrnrlon=lon.max(),llcrnrlat=lat.min(),urcrnrlat=lat.max(), \
 3  resolution='c')
 4 >>> m.drawcoastlines(linewidth=0.25)
 5 <matplotlib.collections.LineCollection object at 0x1091c1f28>
 6 >>> m.drawcountries(linewidth=0.25)
 7 <matplotlib.collections.LineCollection object at 0x10621d0f0>
 8 >>> m.fillcontinents(color='coral',lake_color='aqua')
 9 >>> m.drawmapboundary(fill_color='aqua')
10 <matplotlib.patches.Rectangle object at 0x10918b3c8>
11 >>> m.drawmeridians(np.arange(0,360,30))
12 >>> m.drawparallels(np.arange(-90,90,30))

(四)将lat,lon的数据格式转换成投影需要的格式存入x,y
1 >>> x, y = m(lon,lat)
(五)绘制等值线

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

(六)命名并显示图像
[AppleScript] 纯文本查看 复制代码
1 >>> plt.title('Geopotential Height Contour from Grib')
2 <matplotlib.text.Text object at 0x10918bda0>
3 >>> plt.show()


(七)图像展示file:///var/folders/13/3cns1l2j2lzc436zq7d7wz840000gn/T/cn.wiz.wiznoteformac/WizNote/f1fdcbca-2ba4-4f50-a506-9f48842d1ff1/index_files/44ea29cd-8dc8-4d9e-aaa5-1f572e28f95f.png



楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-4-26 23:04

Powered by BI168大数据社区

© 2012-2014 168大数据

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