第八星系人气爱 发表于 2024-2-29 20:36:54

MATLAB--按显著性分级的相关系数空间分布图


作者:第八星系-工程师
邮箱:2921725518@qq.com


数据处理
%以青藏高原81-97年地表径流与2m气温为例
ID1 = ['F:\毕设\era5\81-19\data.nc'];            %数据路径
sro1 = ncread(ID1,'sro');                        %读取变量地表径流
t2m1 = ncread(ID1,'t2m');                        %读取变量2m气温
lat = ncread(ID1,'latitude');                      %读取纬度信息
lon = ncread(ID1,'longitude');                     %读取经度信息

%将月数据以年为单位排放
k = 1;
for i = 1:39
    msro(:,:,:,i) = sro1(:,:,k:k+11);
    mt2m(:,:,:,i) = t2m1(:,:,k:k+11);
    k = k+12;
end

%求取81-97年年平均
ysro = squeeze(mean(msro(:,:,:,1:17),3));
yt2m = squeeze(mean(mt2m(:,:,:,1:17),3));计算相关系数
for i = 1:301
    for j = 1:151                        
      t2m=yt2m(i,j,:);
      t2m = squeeze(t2m);                        %将数组压缩为17*1
      sro=ysro(i,j,:);
      sro = squeeze(sro);
      r2 = corr(t2m,sro);                        %用corr函数求两个变量的相关系数
      r(i,j) = r2;
    end
end固定目标区域
%读取高原边界经纬度数据
Boundary = load('F:\剑宗密史\冻融指数\指数值340x180x49\TP_boundary.txt');
V1 = Boundary(:,1);
V2 = Boundary(:,2);

%屏蔽高原以外的数据
for i = 1:301
    for j = 1:151   
      in = inpolygon(lon(i),lat(j),V1,V2);
      if in == 0
            r(i,j) = NaN;
      end
    end
end

r1 = r;显著性等级分级
%相关系数显著性检验表
%https://www.docin.com/p-272983879.html
%此处1为显著性达95%的负相关;2为显著性达90%的负相关;3为显著性90%以下负相关;4为显著性90%以下正相关;5为显著性达90%的正相关;6为显著性达95%的正相关
%17      0.389   0.456

for i = 1:301
    for j = 1:151
      if r(i,j)>0.456                               %令相关系数大于0.456的位置都等于6(达95%显著性)      
         r1(i,j) = 6;
      elseif r(i,j)>0.389&&r(i,j)<0.456             %令相关系数位于0.389和0.456之间位置都等于5(达90%显著性)
         r1(i,j) = 5;
      elseif r(i,j)<-0.456
         r1(i,j) = 1;
      elseif r(i,j)>-0.456&&r(i,j)<-0.389
         r1(i,j) = 2;
      elseif 0<r(i,j)&&r(i,j)<0.389
         r1(i,j) = 4;
      elseif -0.389<r(i,j)&&r(i,j)<0
         r1(i,j) = 3;
      end
    end
end

%% 统计各显著性的频数和频率
P1 = 0;
P2 = 0;
P3 = 0;
N1 = 0;
N2 = 0;
N3 = 0;
%令各计数变量满足某显著性的位置等于1
for i = 1:301
    for j = 1:151
      if r1(i,j) == 4                           %如果(i,j)位置上r1等于4(显著性90%以下的正相关)P1计数+1,其他显著等级类似
            P1 = P1 + 1;
      elseif r1(i,j) == 5
            P2 = P2 + 1;
      elseif r1(i,j) == 6
            P3 = P3 + 1;
      elseif r1(i,j) == 1
            N3 = N3 + 1;
      elseif r1(i,j) == 2
            N2 = N2 + 1;
      elseif r1(i,j) == 3
            N1 = N1 + 1;
      end
    end
end

%所得P1、P2、P3、N1、N2、N3即为各显著等级频数

ngrad = P1+P2+P3+N1+N2+N3;                            %总有效格点数(没有r=0的情况下)

%各显著性的频率
f(1,1) = P1/ngrad;
f(2,1) = P2/ngrad;
f(3,1) = P3/ngrad;
f(4,1) = N3/ngrad;
f(5,1) = N2/ngrad;
f(6,1) = N1/ngrad;作图
figure(1)
contourf(lon,lat,r1','LineStyle','none');                %用contourf函数绘制等值线图,此处设置了关闭等值线
hold on
axis()                                     %确定x轴与y轴框图大小
set(gca,'YTick',)                               %y轴刻度
set(gca,'XTick',)                              %x轴刻度
set(gca,'yticklabel',{'25°N','30°N','35°N','40°N'})%y轴刻度标签
set(gca,'xticklabel',{'75°E','80°E','85°E','90°E','90°E','95°E','100°E','105°E'})%x轴刻度标签
set(gca,'CLim',)                                    %等值线数值范围
hold on
map = ;
colormap(map)                                          %map是自定义rgb色卡,用于等值线图填色
title('1981-1997年青藏高原地表径流与2m气温相关系数')       %标题
hold on
plot(V1,V2,'k','LineWidth',1)                            %高原边界
colorbar('Position',,'Ticks',[],'TickLabels',{''});%设置色标位置,关闭刻度和刻度标签
%在色标旁边标注对应显著程度,实际位置可在图窗调整
annotation(figure(1),'textbox',,'String',{'P**'},'FitBoxToText','off','EdgeColor','none');
annotation(figure(1),'textbox',,'String',{'P*'},'FitBoxToText','off','EdgeColor','none');
annotation(figure(1),'textbox',,'String',{'P'},'FitBoxToText','off','EdgeColor','none');
annotation(figure(1),'textbox',,'String',{'N'},'FitBoxToText','off','EdgeColor','none');
annotation(figure(1),'textbox',,'String',{'N*'},'FitBoxToText','off','EdgeColor','none');
annotation(figure(1),'textbox',,'String',{'N**'},'FitBoxToText','off','EdgeColor','none');

%显著性频率直方图
hold on
x = 1:6;
axes1 = axes('Position',);%设置直方图位置和大小
hold(axes1,'on');
%每种显著性用和等值线图对应的颜色
b1 = bar(1,f(1,1),'FaceColor',map(4,:),'EdgeColor','none','BarWidth',0.4);
b2 = bar(2,f(2,1),'FaceColor',map(5,:),'EdgeColor','none','BarWidth',0.4);
b3 = bar(3,f(3,1),'FaceColor',map(6,:),'EdgeColor','none','BarWidth',0.4);
b4 = bar(4,f(4,1),'FaceColor',map(1,:),'EdgeColor','none','BarWidth',0.4);
b5 = bar(5,f(5,1),'FaceColor',map(2,:),'EdgeColor','none','BarWidth',0.4);
b6 = bar(6,f(6,1),'FaceColor',map(3,:),'EdgeColor','none','BarWidth',0.4);
box(axes1,'off');
set(axes1,'XTick',,'XTickLabel',{'','','','','',''});%直方图刻度及其标签


微信搜索“第八星系人造大气理论爱好者”公众号,关注获取文章数据

页: [1]
查看完整版本: MATLAB--按显著性分级的相关系数空间分布图