这个路径:CUsersyDesktoppr_Amon_BCC-CSM2-MR_ssp585_r1i1p1f1_gn_201501-210012nc的文件是CMIP6月降水数据用python将其空间分辨率转换为01°×01°并将其在整个时间序列上的降水分布可视化
以下是一个参考代码:
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
# 读取数据
filepath = r'C:\Users\y\Desktop\pr_Amon_BCC-CSM2-MR_ssp585_r1i1p1f1_gn_201501-210012.nc'
ds = xr.open_dataset(filepath)
# 提取降水数据
pr = ds['pr']
# 获取原始空间分辨率和范围
lat = ds['lat']
lon = ds['lon']
lat_min, lat_max = lat.min().values, lat.max().values
lon_min, lon_max = lon.min().values, lon.max().values
lat_res = np.abs(lat[1] - lat[0]).values
lon_res = np.abs(lon[1] - lon[0]).values
# 计算新的网格范围和分辨率
new_lat_min = round(lat_min - lat_res/2, 1)
new_lat_max = round(lat_max + lat_res/2, 1)
new_lon_min = round(lon_min - lon_res/2, 1)
new_lon_max = round(lon_max + lon_res/2, 1)
new_lat = np.arange(new_lat_min, new_lat_max+lat_res, lat_res)
new_lon = np.arange(new_lon_min, new_lon_max+lon_res, lon_res)
# 重新插值到新的网格
pr_interp = pr.interp(lat=new_lat, lon=new_lon)
# 可视化降水分布
fig, ax = plt.subplots(figsize=(8, 6))
pr_interp.mean(dim='time').plot(ax=ax, cmap='Blues', cbar_kwargs={'label': 'mm/day'})
ax.set_xlabel('Longitude')
ax.set_ylabel('Latitude')
ax.set_title('Mean Precipitation Rate (2015-2100)')
plt.show()
这段代码首先读取CMIP6数据文件,然后提取其中的降水数据。接着计算原始数据的空间分辨率和范围,并根据0.1°的分辨率计算新的网格范围和分辨率。最后使用xarray库中的interp()函数将数据重新插值到新的网格上,并可视化降水分布
原文地址: http://www.cveoy.top/t/topic/cdbZ 著作权归作者所有。请勿转载和采集!