基于Python的Grib数据可视化

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

一、库的安装

(一)matplotlib安装

  • matplotlib依赖
    1. nose

    2. numpy

    3. pyparsing

    4. python-dateutil

    5. cycler

    6. pkg-config

    7. freetype

    8. 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 make && date
3 sudo make install && date

7、安装freetype

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

8、安装libpng

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

9、安装matplotlib-1.5.0

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

1 python3 setup.py install

(二)basemap安装

  • basemap依赖
    1. geos

    2. pyproj

  • 安装过程

1、安装GEOS

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

2、安装pyproj

1 python3 setup.py install

3、安装basemap

1 python3 setup.py install

(三)pygrib安装

  • pygrib依赖
    1. Jasper

    2. GRIB API

    3. numpy

    4. pyproj

  • 安装过程

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

1、安装Jasper

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

2、安装GRIB API

1 ./configure --with-jasper='/usr/local/'
2 make && date
3 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 >>> for grb in grbs:
3 grb
4 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 >>> 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数据可视化

(一)导入需要的模块

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

(二)创建一个figure

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

(三)创建一个basemap实例

 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)

(五)绘制等值线

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

(六)命名并显示图像

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

(七)图像展示

python grib气象数据可视化的更多相关文章

  1. python 爬虫与数据可视化--python基础知识

    摘要:偶然机会接触到python语音,感觉语法简单.功能强大,刚好朋友分享了一个网课<python 爬虫与数据可视化>,于是在工作与闲暇时间学习起来,并做如下课程笔记整理,整体大概分为4个 ...

  2. python 爬虫与数据可视化--matplotlib模块应用

    一.数据分析的目的(利用大数据量数据分析,帮助人们做出战略决策) 二.什么是matplotlib? matplotlib: 最流行的Python底层绘图库,主要做数据可视化图表,名字取材于MATLAB ...

  3. Python TVTK 标量数据可视化与矢量数据可视化,空间轮廓线可视化

    Python数据可视化分为 标量可视化,矢量可视化,轮廓线可视化 标量又称无向量,只有大小没有方向,运算遵循代数运算法则比如质量,密度,温度,体积,时间 矢量又称向量,它是由大小,方向共同确定的量,运 ...

  4. 使用 jupyter-notebook + python + matplotlib 进行数据可视化

    上次用 python 脚本中定期查询数据库,监视订单变化,将时间与处理完成订单的数量进行输入写入日志,虽然省掉了人为定时查看数据库并记录的操作,但是数据不进行分析只是数据,要让数据活起来! 为了方便看 ...

  5. 在我的新书里,尝试着用股票案例讲述Python爬虫大数据可视化等知识

    我的新书,<基于股票大数据分析的Python入门实战>,预计将于2019年底在清华出版社出版. 如果大家对大数据分析有兴趣,又想学习Python,这本书是一本不错的选择.从知识体系上来看, ...

  6. 从python爬虫以及数据可视化的角度来为大家呈现“227事件”后,肖战粉丝的数据图

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取t.cn ...

  7. python 爬虫与数据可视化--数据提取与存储

    一.爬虫的定义.爬虫的分类(通用爬虫.聚焦爬虫).爬虫应用场景.爬虫工作原理(最后会发一个完整爬虫代码) 二.http.https的介绍.url的形式.请求方法.响应状态码 url的形式: 请求头: ...

  8. 吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB

    本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...

  9. python 爬虫与数据可视化--爬虫基础知识

    一.python中的模块 模块的安装:pip install 模块名 导入模块与函数:import requests . from pymongo import MongoClient json模块的 ...

随机推荐

  1. Java容器解析系列(6) Queue Deque AbstractQueue 详解

    首先我们来看一下Queue接口: /** * @since 1.5 */ public interface Queue<E> extends Collection<E> { / ...

  2. springcloud Ribbon学习笔记二

    之前介绍了如何搭建eureka服务并开发了一个用户服务成功注册到了eureka中,接下来介绍如何通过ribbon来从eureka中获取用户服务: springcloud ribbon提供客户端的负载均 ...

  3. 剑指Offer 55. 链表中环的入口结点 (链表)

    题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目地址 https://www.nowcoder.com/practice/253d2c59ec3e4bc68d ...

  4. canvas 绘画随机点

    直接看图吧: 这样的随机点,是小圆点组成的,然后一直在动,记录一下,万一以后要用到呢: canvas的具体设置我就不写了,另一篇文档里有: drawRandomDot () { let leftCan ...

  5. gitlab 同步小脚本

    gitlab 是公司中的代码仓库,如何保证两台机器同步呢 公司中使用的是docker那么久使用docker进行演示了也方便以后的工作查找资料 附:脚本 #!/bin/bash docker stop ...

  6. SpringBoot下如何配置实现跨域请求?

    一.什么是跨域请求? 跨域请求,就是说浏览器在执行脚本文件的ajax请求时,脚本文件所在的服务地址和请求的服务地址不一样.说白了就是ip.网络协议.端口都一样的时候,就是同一个域,否则就是跨域.这是由 ...

  7. android active间数据传递

    Bundle是key-value存储. Bundle bundle=new Bundle(); bundle.putString("key", "value") ...

  8. python魔法方法

    1.__call__ 实现__call__后,该类的对象可以被调用 举例如: class test_call_: def __init__(self, n): self.n = n def __cal ...

  9. C# 以共享只读方式打开被其它程序占用的文件

    iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, Sys ...

  10. python调用linux的命令

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 ...