ERA5 hourly data on pressure levels数据处理/Python(一)

一、需求分析

熟悉ERA5数据,提取某一时次某一经纬度的温度、U风、V风,绘制垂直廓线。

二、数据准备

ERA5数据下载地址:

Copernicus Climate Data Store | Copernicus Climate Data Store

ERA5是 ECMWF 对过去 80 年全球气候和天气的第五代再分析。数据可从 1940 年开始提供。ERA5 取代了 ERA-Interim 再分析。

ERA5 提供大量大气、海浪和陆地表面量的每小时估计值。不确定性估计值由底层 10 成员集合以每三小时为间隔进行采样。

ERA5 每日更新,延迟时间约为 5 天。

数据已重新划分为 0.25 度的常规经纬度网格,用于重新分析,0.5 度用于不确定性估计(海浪分别为 0.5 度和 1 度)。有四个主要子集:每小时和每月产品,包括气压水平(高空场)和单一水平(大气、海浪和陆地表面量)。

主要变量见表MAIN VARIABLES。

作者下载的参数如下图:

三、程序设计

import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
# 加载ERA5数据
file_path = 'D:/test/202405.nc'  # 替换为你的ERA5数据文件路径
dataset = xr.open_dataset(file_path)

# 筛选时间点
timestamp = np.datetime64('2024-05-03T14:00:00')
dataset_time_filtered = dataset.sel(time=timestamp, method='nearest')

# 筛选地点
latitude1, longitude1 = 31.8667, 117.2833  # 北纬31度52分、东经117度17分
latitude2, longitude2 = 31.0, 117.3  # 北纬31度、东经117.3度

# 提取两个地点的温度廓线、U-component of wind和V-component of wind
temperature_profile1 = dataset_time_filtered.sel(latitude=latitude1, longitude=longitude1, method='nearest').t
temperature_profile2 = dataset_time_filtered.sel(latitude=latitude2, longitude=longitude2, method='nearest').t
u_wind_profile1 = dataset_time_filtered.sel(latitude=latitude1, longitude=longitude1, method='nearest').u
u_wind_profile2 = dataset_time_filtered.sel(latitude=latitude2, longitude=longitude2, method='nearest').u
v_wind_profile1 = dataset_time_filtered.sel(latitude=latitude1, longitude=longitude1, method='nearest').v
v_wind_profile2 = dataset_time_filtered.sel(latitude=latitude2, longitude=longitude2, method='nearest').v

# 创建一个图表和两个子图
fig, (plt1, plt2) = plt.subplots(1, 2, figsize=(14, 6))

# 温度廓线
temperature_profile1.plot(y='level', marker='o', label=f'Temperature 31.8667N, 117.2833E', ax=plt1)
temperature_profile2.plot(y='level', marker='x', label=f'Temperature 31.0N, 117.3E', ax=plt1)
plt1.set_title('Temperature Profiles')
plt1.set_xlabel('Temperature (K)')
plt1.set_ylabel('Pressure Level (hPa)')
plt1.invert_yaxis()  # 压力随高度增加而减小,因此反转y轴
plt1.legend()
plt1.grid(True)

# U和V风分量
# 注意:风速可能需要转换为其他单位,这里假设单位是m/s
u_wind_profile1.plot(y='level', marker='o', linestyle='--', label=f'U-wind 31.8667N, 117.2833E', ax=plt2)
u_wind_profile2.plot(y='level', marker='x', linestyle='--', label=f'U-wind 31.0N, 117.3E', ax=plt2)
v_wind_profile1.plot(y='level', marker='o', linestyle='-.', label=f'V-wind 31.8667N, 117.2833E', ax=plt2)
v_wind_profile2.plot(y='level', marker='x', linestyle='-.', label=f'V-wind 31.0N, 117.3E', ax=plt2)
plt2.set_title('Wind Components')
plt2.set_xlabel('Wind Speed (m/s)')
plt2.set_ylabel('Pressure Level (hPa)')
plt2.invert_yaxis()  # 压力随高度增加而减小,因此反转y轴
plt2.legend()
plt2.grid(True)

# 调整布局并显示图表
plt.tight_layout()
plt.show()

四、结果

五、下一步思考

5.1 UV分量转换成风速和风向

5.2 生成日、月等数据,分析特征

5.3 看相关文献整理思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值