暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python气象数据处理与绘图:ERA5降水数据下载与绘图

气海无涯 2021-09-03
2925

1、ERA5再分析数据下载

下载网站:
1https://cds.climate.copernicus.eu/

步骤:
1、注册账号
2、获取api秘钥,存在C:\Users\xxxxx.cdsapirc
3、检索数据,本示例数据来自:

1https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels?tab=form

4、构建下载脚本,主要参数如下,支持grib格式和nc格式
1import os
2os.makedirs('./work/assignment_1')

输出:
1!echo -e 'url: https://cds.climate.copernicus.eu/api/v2\nkey: xxxxxxxxx'/home/kesci/work/.cdsapirc  

查看修改后的.cdsapirc文件内容
1!cat /home/kesci/work/.cdsapirc 

下载数据:
 1import cdsapi
2c = cdsapi.Client()
3c.retrieve("reanalysis-era5-single-levels",
4           {
5               "variable""total_precipitation",
6               "year""2020",
7               "month""07",
8               "day""13",
9               "time""00:00",
10               "format""grib"
11           },
12           '2020071300_prep.grib')

输出:
1Result(content_length=8316120,content_type=application/x-grib,location=http://136.156.133.36/cache-compute-0010/cache/data4/adaptor.mars.internal-1596637370.1114588-15674-12-6d426f89-fa36-440d-9e24-edb750c8db93.grib)

移动文件:
1import shutil
2shutil.move('2020071300_prep.grib''./work/assignment_1')

输出:
1'./work/assignment_1/2020071300_prep.grib'

2、grib数据读取

1import Ngl, Nio
2ds = Nio.open_file("./work/assignment_1/2020071300_prep.grib","r")
3ds

输出:
1<Nio.NioFile at 0x7fdbfc3ab3a0>

查看变量
1ds.variables

输出:

1{'TP_GDS0_SFC_acc3h': <Nio.NioVariable object at 0x7fdbfc3abf10>, 'TP_GDS0_SFC_acc1h': <Nio.NioVariable object at 0x7fdbfc3ab4c0>, 'g0_lat_3': <Nio.NioVariable object at 0x7fdbfc3ab550>, 'g0_lon_4': <Nio.NioVariable object at 0x7fdbfc3ab460>, 'g0_lat_1': <Nio.NioVariable object at 0x7fdbfc341e20>, 'g0_lon_2': <Nio.NioVariable object at 0x7fdbe43dcc70>, 'ensemble0_info': <Nio.NioVariable object at 0x7fdbe43dcb20>, 'ensemble0': <Nio.NioVariable object at 0x7fdbe43dcb80>}

读取降水数据

1prep = ds.variables['TP_GDS0_SFC_acc1h'][:]
2print(prep.shape)

输出:

1(721, 1440)

读取经纬度,并查看数据维度

1lon = ds.variables['g0_lon_4'][:]
2lat = ds.variables['g0_lat_3'][:]
3print(lon.shape)
4print(lat.shape)

输出:

1(1440,)
2(721,)

调整经度数值

1lon = lon-180

降雨量单位转换

1prep = prep*1000

3、空间分布绘图

 1# 导入模块
2%matplotlib inline
3import numpy as np
4import xarray as xr
5import cartopy.crs as ccrs
6import cartopy.feature as cfeat
7from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
8import cartopy.io.shapereader as shpreader
9import matplotlib.pyplot as plt
10import cmaps
11# 设置地图投影
12proj = ccrs.LambertConformal(central_longitude=105,central_latitude=90,standard_parallels=(2547))
13# 创建画布
14fig = plt.figure(figsize=(10,5))
15# 添加子图
16ax = fig.subplots(11, subplot_kw={'projection': proj}) 
17# 设置范围
18ax.set_extent([801301755],crs=ccrs.PlateCarree())
19
20# 添加国界和九段线
21province = shpreader.Reader('/home/kesci/work/province.shp')
22nineline = shpreader.Reader('/home/kesci/work/nine_line.shp')
23ax.add_geometries(province.geometries(), crs=ccrs.PlateCarree(), linewidths=0.5,edgecolor='k',facecolor='none')
24ax.add_geometries(nineline.geometries(), crs=ccrs.PlateCarree(),linewidths=0.5, color='k')
25# 设置网格点属性
26gl = ax.gridlines(x_inline=False, y_inline=False, auto_inline=False, draw_labels=True, linewidth=1, color='k', alpha=0.5, linestyle='--')
27gl.xlabels_top = False  #关闭顶端标签
28gl.ylabels_right = False  #关闭右侧标签
29gl.xformatter = LONGITUDE_FORMATTER  #x轴设为经度格式
30gl.yformatter = LATITUDE_FORMATTER  #y轴设为纬度格式
31# 设置colorbar
32levels = np.arange(0,11,2)
33cf = ax.pcolormesh(lon,lat,prep,vmin=0,vmax=10,cmap=cmaps.WhiteBlue,transform=ccrs.PlateCarree())
34plt.title('ERA5 total precipitation at 2020071300(UTC)',fontsize=12)
35
36fig.subplots_adjust(right=0.95)
37cbar_ax = fig.add_axes([0.850.120.030.8])
38cb = plt.colorbar(cf,cax=cbar_ax,ticks=levels)
39cb.set_label('Total Precipitaion (mm)', fontdict={'size':10})
40cb.ax.tick_params(labelsize=10)




有问题可以到QQ群里进行讨论,我们在那边等大家。

QQ群号:854684131



文章转载自气海无涯,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论