python绘制蒸发数据

python绘制蒸发数据——以GLEAM数据为例

数据来源于GLEAM,网址:GLEAM

Global Land Evaporation Amsterdam Model (GLEAM)是一套算法,可分别估计土地蒸发的不同组成部分(通常称为“蒸发蒸腾”):蒸腾、裸土蒸发、截留损失、开放水域蒸发和升华。此外,GLEAM 还提供表面和根部土壤湿度、潜在蒸发和蒸发应力条件

下载方式通过SFTP协议连接到GLEAM的服务器,填写自己的邮箱,网址会说明具体的下载方式与详细信息。可以根据自己的需要选择下载文件,文件的格式是nc文件,这里以2003-2022年度实际蒸发文件为例

代码如下:

import netCDF4 as nc
import matplotlib.pyplot as plt
import numpy as np

# 打开下载的.nc文件
nc_file = nc.Dataset('E_2003-2022_GLEAM_v3.7b_YR.nc', 'r')  # 'r'表示只读模式
# print(nc_file.variables.keys()) #dict_keys(['lon', 'lat', 'time', 'E'])
latitude = nc_file.variables['lat'][:] # latitude与longtitude都是一维数组
longitude = nc_file.variables['lon'][:]
[X, Y] = np.meshgrid(longitude, latitude) # 合并成二维矩阵
time = nc_file.variables['time'][:]
E = nc_file.variables['E'] # E是三维数组
# print(X.shape, Y.shape, E.shape) 查看数组格式

plt.contourf(X, Y, E[6, :, :]) # 数字6代表2009年,从2003年开始,包括2003年,有7年,因为索引从0开始
plt.colorbar(label="E", orientation="horizontal")
plt.show()
nc_file.close() # 关闭nc文件

绘制结果如下:

可以看到赤道附近的实际蒸发量较高
在这里插入图片描述

选择指定区域绘制

上图是全球的蒸发量图,现在我们指定经纬度范围获取蒸发量图
代码如下:

import netCDF4 as nc
import matplotlib.pyplot as plt
import numpy as np

# 打开下载的.nc文件
nc_file = nc.Dataset('E_2003-2022_GLEAM_v3.7b_YR.nc', 'r')  # 'r'表示只读模式
latitude = nc_file.variables['lat'][144:343]
longitude = nc_file.variables['lon'][1008:1247]
# 获取维度大于等于4°小于等于54°的索引区间,经度同理
print(np.where((latitude >= 4) & (latitude <= 54)))  # 144-343
print(np.where((longitude >= 72) & (longitude <= 132)))  # 1008-1247
[X, Y] = np.meshgrid(longitude, latitude) 

plt.contourf(X, Y, E[6, 144:343, 1008:1247])
plt.colorbar(label="E", orientation="horizontal")
plt.show()
nc_file.close()

结果如下:
可以看到我国西北部的实际蒸发量要小于东南部,可能由于东南部降雨多,且植被茂盛,从而导致蒸发量和蒸腾量高
在这里插入图片描述

获取经纬度与蒸发量数据

我们想进一步的获取对应经纬度点的蒸发量,这样也可以方便做更多的数据处理工作,比如制作成xyz文件或者grd文件等等
代码如下:

import netCDF4 as nc
import numpy as np
# 打开下载的.nc文件
nc_file = nc.Dataset('E_2003-2022_GLEAM_v3.7b_YR.nc', 'r')  # 'r'表示只读模式
latitude = nc_file.variables['lat'][:]
longitude = nc_file.variables['lon'][:]
[X, Y] = np.meshgrid(longitude, latitude)
E = nc_file.variables['E']

# 利用zip函数可以轻松实现同时遍历多个数组,np.nditer可以实现遍历多维数组
for x_element, y_element, e_element in zip(np.nditer(X), np.nditer(Y), np.nditer(E[6])):
    print(x_element, y_element, e_element)

示例结果如下:

经度 维度 蒸发量
125 -82.625 13.727023
-29.875 -82.625 13.677185
-29.625 -82.625 13.61782
-29.375 -82.625 13.558994
-29.125 -82.625 13.500708
-28.875 -82.625 13.445981
-28.625 -82.625 13.394822
-28.375 -82.625 13.573573
-28.125 -82.625 13.979104
-27.875 -82.625 14.374488
-27.625 -82.625 14.758856
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭博锐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值