全球降水变化趋势分析:1979-2022年降水月变化量及趋势可视化
以下是用MATLAB分析世界范围内降水月变化量及趋势的代码:
% 加载nc文件
ncfile = 'grads\air.2m.mon.mean.nc';
lat = ncread(ncfile, 'lat');
lon = ncread(ncfile, 'lon');
time = ncread(ncfile, 'time');
precipitation = ncread(ncfile, 'precip');
% 计算月变化量
precip_change = diff(precipitation, 1, 3);
% 计算线性趋势
[~, ~, n] = size(precip_change);
precip_trend = zeros(size(precip_change, 1), size(precip_change, 2));
for i = 1:size(precip_change, 1)
for j = 1:size(precip_change, 2)
x = (1:n)';
y = squeeze(precip_change(i, j, :));
idx = ~isnan(y);
if sum(idx) > 2 % 至少需要3个非NaN值才能计算趋势
p = polyfit(x(idx), y(idx), 1);
precip_trend(i, j) = p(1);
else
precip_trend(i, j) = NaN;
end
end
end
% 画出线柱图
figure;
subplot(2, 1, 1);
bar(mean(precip_change, [1, 2]));
title('Monthly precipitation change (mm)');
ylabel('Change (mm)');
set(gca, 'xtick', 1:12, 'xticklabel', {'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'});
subplot(2, 1, 2);
pcolor(lon, lat, precip_trend);
shading flat;
colorbar;
caxis([-0.05 0.05]);
title('Precipitation trend (mm/month/year)');
xlabel('Longitude');
ylabel('Latitude');
运行以上代码,会得到一个包含两个子图的图形窗口。上面的子图是降水的月变化量,下面的子图是降水的线性趋势。月变化量用线柱图表示,每个柱子代表一个月份,高度表示该月的降水量变化量(以mm为单位)。降水趋势用彩色图表示,每个像素点代表一个经纬度坐标,颜色表示该点的降水趋势(以mm/month/year为单位)。趋势为正表示降水增加,为负表示降水减少,颜色越深表示趋势越明显。
原文地址: https://www.cveoy.top/t/topic/nm22 著作权归作者所有。请勿转载和采集!