如何使用 Python 绘制 GFS grib2 数据?

Posted

技术标签:

【中文标题】如何使用 Python 绘制 GFS grib2 数据?【英文标题】:How do I plot GFS grib2 data with Python? 【发布时间】:2015-08-14 19:25:58 【问题描述】:

我想在我的网站上显示接下来几天的温度图表,全球预报系统最能满足我的需求。如何在 matplotlib 中绘制 GRIB2 数据并从图中创建 PNG 图像?

我花了几个小时在互联网上搜索,询问知道如何做到这一点的人(他们根本没有帮助),我不知道从哪里开始。 GFS 数据可以在这里找到:ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/ 如果可能的话,我希望它是轻量级的,并且不会丢失太多的服务器空间。

【问题讨论】:

【参考方案1】:

基本上有2个步骤:

    使用 wgrib 从 grib2 数据中提取选定的变量,并保存到 NetCDF 文件中。虽然有一些 API,比如 pygrib,但我发现直接使用命令行工具的 bug 更少。一些有用的链接:

安装:http://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/compile_questions.html 技巧:http://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/tricks.wgrib2

例如提取温度和湿度:

wgrib2 test.grb2 -s | egrep '(:RH:2 m above ground:|:TMP:2 m above ground:)'|wgrib2 -i test.grb2 -netcdf test.nc

    使用 Python 库处理 NetCDF 文件,示例代码可能如下所示:

    导入警告 warnings.filterwarnings("忽略") 将 matplotlib.pyplot 导入为 plt 将 numpy 导入为 np 将熊猫导入为 pd % matplotlib 内联 从 netCDF4 导入数据集 从 mpl_toolkits.basemap 导入底图 从 pyproj 导入 Proj 将 matplotlib.cm 导入为 cm 导入日期时间

    文件 = “test.nc” rootgrp = 数据集(文件,“r”) x = rootgrp['longitude'][:] # 0-359, step = 1 y = rootgrp['latitude'][:] # -90~90, step =1 tmp = rootgrp['TMP_2maboveground'][:][0] # shape(181,360) dt = datetime.datetime(1970,1,1) + datetime.timedelta(seconds = rootgrp['time'][0])

    fig = plt.figure(dpi=150) m = 底图(投影='mill',lat_ts=10,llcrnrlon=x.min(), urcrnrlon=x.max(),llcrnrlat=y.min(),urcrnrlat=y.max(),分辨率='c')

    xx, yy = m(*np.meshgrid(x,y)) m.pcolormesh(xx,yy,tmp-273.15,shading='flat',cmap=plt.cm.jet) m.colorbar(location='right')

    m.drawcoastlines() m.drawparallels(np.arange(-90.,120.,30.), 标签=[1,0,0,0], fontsize=10) m.drawmeridians(np.arange(0.,360.,60.),标签=[0,0,0,1],字体大小=10) plt.title(", GFS, 温度 (C) ".format(dt.strftime('%Y-%m-%d %H:%M UTC'))) plt.show()

【讨论】:

如果您必须使用 grib 文件格式,这非常好。谢谢!【参考方案2】:

当您考虑数据使用和存储的轻量级时,您可能会考虑使用 GRIB 以外的其他数据形式。 GRIB 文件通常包含全球数据,当您只想针对特定域进行绘图时,这是非常无用的。

我强烈建议使用来自 NOAA-NCEP opendap 数据服务器的数据。您可以使用 netCDF4 从该服务器获取数据。不幸的是,已知此服务器有时不稳定,这可能会导致刷新运行延迟和/或数据集格式错误。尽管在 95% 的时间里,我都可以访问我需要的所有数据。

注意:由于新运行发布后的高流量,此数据服务器可能会很慢。访问数据服务器可以在这里找到:http://nomads.ncdc.noaa.gov/data.php?name=access#hires_weather_datasets

使用 Matplotlib 和 Basemap 工具包非常容易绘制数据。一些示例,包括 GFS 数据集的使用,可以在这里找到:http://matplotlib.org/basemap/users/examples.html

【讨论】:

基本上,OpenDAP 服务器包含最多一个月左右的最新数据。如果有人使用 GFS 归档数据就无法使用 OpenDAP。为此,必须有人通过“HAS”从 ncdc.noaa.gov 网站下载。

以上是关于如何使用 Python 绘制 GFS grib2 数据?的主要内容,如果未能解决你的问题,请参考以下文章

GFS Grib 风值解码和转换 (U & V)

Python处理气象信息grib,grib2文件

如何连接大量的 GRIB2 文件?

NDFD GRIB2如何在使用xarray时修复镜像数据

xarray+cfgrib读取grib2文件问题-已解决

将 grib2 文件转换为 csv