Matlab處理氣象數據(十六)城市與非城市區域的對比

利用2010城市邊界數據,建立掩膜。從全國數據中摳出城市區域的數據,然後反向摳出非城市區域的數據,最後對比兩個區域趨勢變化的不同。
在這裏插入圖片描述

柵格化的城市區域掩膜

16.1 摳出城市和非城市的數據

clc;clear
%扣NCEP的城市和非城市區域數據
lon=72:0.5:135.5;
lat=18:0.5:53.5;
[x y]=meshgrid(lon,lat); 
 
load('E:\數據\201501\T1')
T10=reshape(T1,[72 128 12 35]);
T11=reshape(T1,[72 128 12*35]);
T10=squeeze(nanmean(T10,3));
T_mean=squeeze(nanmean(T11,3));
clear T1
for i=1:35
T1(:,:,i)=squeeze(T10(:,:,i))-T_mean;
end
map=shaperead('E:\數據\邊界\2010urban_geographic\2010urban_geographic.shp');
bou1_4lx=[map(:).X];%提取經度信息 
bou1_4ly= [map(:).Y];%提取緯度信息 
R=makerefmat('RasterSize',size(T1),'Lonlim',[72 135.5],'Latlim',[18 53.5]);
MASK=vec2mtx(bou1_4ly,bou1_4lx,squeeze(T1(:,:,1)),R,'filled');
MASK(find(MASK>1))=nan;
MASK(find(MASK==1))=0;%這裏保存MASK數據,留到後面用
T12=T1;%刪除邊界區域外的值
for i=1:72
    for j=1:128
if isnan(MASK(i,j))==1
T12(i,j,:)=nan;%T12即城市區域的數據
end
    end
end
%摳非城市的
for i=1:72
    for j=1:128
if isnan(T1(i,j,:))==1
T1(i,j,:)=0;
end
end
end
for i=1:72
    for j=1:128
if isnan(T12(i,j,:))==1
T12(i,j,:)=0;
end
end
end
T13=T1-T12;
for i=1:72
    for j=1:128
if T13(i,j,:)==0
T13(i,j,:)=nan;%T13即非城市區域的數據
end
end
end

%扣觀測數據的城市和非城市區域數據
 
lon=72:0.5:135.5;
lat=18:0.5:53.5;
[x y]=meshgrid(lon,lat); 
 
load('E:\數據\201501\T2')
T10=reshape(T2,[72 128 12 35]);
T11=reshape(T2,[72 128 12*35]);
T10=squeeze(nanmean(T10,3));
T_mean=squeeze(nanmean(T11,3));
clear T2
for i=1:35
T2(:,:,i)=squeeze(T10(:,:,i))-T_mean;
end
map=shaperead('E:\數據\邊界\2010urban_geographic\2010urban_geographic.shp');
bou1_4lx=[map(:).X];%提取經度信息 
bou1_4ly= [map(:).Y];%提取緯度信息 
R=makerefmat('RasterSize',size(T2),'Lonlim',[72 135.5],'Latlim',[18 53.5]);
MASK=vec2mtx(bou1_4ly,bou1_4lx,squeeze(T2(:,:,1)),R,'filled');
MASK(find(MASK>1))=nan;
MASK(find(MASK==1))=0;
T22=T2;
for i=1:72
    for j=1:128
if isnan(MASK(i,j))==1
T22(i,j,:)=nan;
end
    end
end
%摳非城市的
for i=1:72
    for j=1:128
if isnan(T2(i,j,:))==1
T2(i,j,:)=0;
end
end
end
for i=1:72
    for j=1:128
if isnan(T22(i,j,:))==1
T22(i,j,:)=0;
end
end
end
T23=T2-T22;
for i=1:72
    for j=1:128
if T23(i,j,:)==0
T23(i,j,:)=nan;
end
end
end

16.2 城市和非城市數據的異常和趨勢

%城市區域的距平和趨勢線
T12=reshape(T12,[72*128,35]);
T12=nanmean(T12,1);
T22=reshape(T22,[72*128,35]);
T22=nanmean(T22,1);
m1=mean(T12); %求Tem1的平均值
m2=mean(T22);
a1=T12-m1; %求Tem1的距平
a2=T22-m2;
 
plot(a1,'r.-','linewidth',2);%畫NCEP數據年平均氣溫折線圖,紅色實線實心點
hold on
plot(a2,'b.-','linewidth',2);
plot(a1-detrend(a1),'r-','linewidth',2);
plot(a2-detrend(a2),'b-','linewidth',2);
legend({'NCEP','Observed'},'Location','Northwest')
set(gca,'xtick',[2 7 12 17 22 27 32]); 
set(gca,'xticklabel',{'1980','1985','1990','1995','2000','2005','2010'}); 
axis([ -inf inf -1.5 1.5]);
h=xlabel('Year');
set(h, 'FontSize',8,'FontWeight','Bold')
h=ylabel('Temp. Anom. (\circC)');
set(h, 'FontSize',8,'FontWeight','Bold')
set(gca, 'FontSize',8,'FontWeight','Bold','tickdir','out')
xlim([1 35])%x軸範圍鎖定爲1~35
box off %去掉外框
hold off

%非城市區域的距平和趨勢線
T13=reshape(T13,[72*128,35]);
T13=nanmean(T13,1);
T23=reshape(T23,[72*128,35]);
T23=nanmean(T23,1);
m1=mean(T13); %求Tem1的平均值
m2=mean(T23);
a1=T13-m1; %求Tem1的距平
a2=T23-m2;
 
plot(a1,'r.-','linewidth',2);%畫NCEP數據年平均氣溫折線圖,紅色實線實心點
hold on
plot(a2,'b.-','linewidth',2);
plot(a1-detrend(a1),'r-','linewidth',2);
plot(a2-detrend(a2),'b-','linewidth',2);
legend({'NCEP','Observed'},'Location','Northwest')
set(gca,'xtick',[2 7 12 17 22 27 32]); 
set(gca,'xticklabel',{'1980','1985','1990','1995','2000','2005','2010'}); 
axis([ -inf inf -1.5 1.5]);
h=xlabel('Year');
set(h, 'FontSize',8,'FontWeight','Bold')
h=ylabel('Temp. Anom. (\circC)');
set(h, 'FontSize',8,'FontWeight','Bold')
set(gca, 'FontSize',8,'FontWeight','Bold','tickdir','out')
xlim([1 35])%x軸範圍鎖定爲1~35
box off %去掉外框
hold off

得到結果如下圖所示:
在這裏插入圖片描述

城市區域的異常和趨勢線

在這裏插入圖片描述

非城市區域的異常和趨勢線

16.3 計算城市和非城市的數據的DTR

%計算NCEP數據城市和非城市區域的DTR
load('E:\數據\201507\MASK');
load('E:\數據\201501\Tmax1');
load('E:\數據\201501\Tmin1');
DTR1=Tmax1-Tmin1;
T10=reshape(DTR1,[72 128 12 33]);
T11=reshape(DTR1,[72 128 12*33]);
T10=squeeze(nanmean(T10,3));
T_mean=squeeze(nanmean(T11,3));
clear DTR1
for i=1:33
DTR1(:,:,i)=squeeze(T10(:,:,i))-T_mean;
end
clear i j T_mean T11 T10 Tmax1 Tmin1
DTR12=DTR1;
for i=1:72
    for j=1:128
if isnan(MASK(i,j))==1
DTR12(i,j,:)=nan;
end
    end
end
%save DTR12;%NCEP數據城市區域的DTR

for i=1:72
    for j=1:128
if isnan(DTR1(i,j,:))==1
DTR1(i,j,:)=0;
end
end
end
for i=1:72
    for j=1:128
if isnan(DTR12(i,j,:))==1
DTR12(i,j,:)=0;
end
end
end
DTR13=DTR1-DTR12;
for i=1:72
    for j=1:128
if DTR13(i,j,:)==0
DTR13(i,j,:)=nan;
end
end
end
%save DTR13;%NCEP數據非城市區域的DTR

%計算觀測數據數據城市和非城市區域的DTR
load('E:\數據\201507\MASK');
load('E:\數據\201501\Tmax2');
load('E:\數據\201501\Tmin2');
DTR2=Tmax2-Tmin2;
T10=reshape(DTR2,[72 128 12 33]);
T11=reshape(DTR2,[72 128 12*33]);
T10=squeeze(nanmean(T10,3));
T_mean=squeeze(nanmean(T11,3));
clear DTR2
for i=1:33
DTR2(:,:,i)=squeeze(T10(:,:,i))-T_mean;
end
clear i j T_mean T11 T10 Tmax2 Tmin2
DTR22=DTR2;
for i=1:72
    for j=1:128
if isnan(MASK(i,j))==1
DTR22(i,j,:)=nan;
end
    end
end
%save DTR22;%觀測數據城市區域的DTR
 
for i=1:72
    for j=1:128
if isnan(DTR2(i,j,:))==1
DTR2(i,j,:)=0;
end
end
end
for i=1:72
    for j=1:128
if isnan(DTR22(i,j,:))==1
DTR22(i,j,:)=0;
end
end
end
DTR23=DTR2-DTR22;
for i=1:72
    for j=1:128
if DTR23(i,j,:)==0
DTR23(i,j,:)=nan;
end
end
end
%save DTR23;%觀測數據非城市區域的DTR

16.4 城市和非城市的數據的DTR趨勢的異常和趨勢線

%城市區域
load('DTR12.mat')
load('DTR22.mat')
DTR12=reshape(DTR12,[72*128,33]);
DTR12=nanmean(DTR12,1);
DTR22=reshape(DTR22,[72*128,33]);
DTR22=nanmean(DTR22,1);
m1=mean(DTR12);
m2=mean(DTR22);
a1=DTR12-m1;
a2=DTR22-m2;
 
plot(a1,'r.-','linewidth',2);%畫NCEP數據DTR折線圖,紅色實線實心點
hold on
plot(a2,'b.-','linewidth',2);
plot(a1-detrend(a1),'r-','linewidth',2);
plot(a2-detrend(a2),'b-','linewidth',2);
legend({'NCEP','Observed'},'Location','Northwest')
set(gca,'xtick',[2 7 12 17 22 27 32]); 
set(gca,'xticklabel',{'1980','1985','1990','1995','2000','2005','2010'}); 
axis([ -inf inf -1 1]);
h=xlabel('Year');
set(h, 'FontSize',8,'FontWeight','Bold')
h=ylabel('Temp. Anom. (\circC)');
set(h, 'FontSize',8,'FontWeight','Bold')
set(gca, 'FontSize',8,'FontWeight','Bold','tickdir','out')
xlim([1 33])%x軸範圍鎖定爲1~33
box off %去掉外框
hold off

%非城市區域
load('DTR13.mat')
load('DTR23.mat')
DTR13=reshape(DTR13,[72*128,33]);
DTR13=nanmean(DTR13,1);
DTR23=reshape(DTR23,[72*128,33]);
DTR23=nanmean(DTR23,1);
m1=mean(DTR13);
m2=mean(DTR23);
a1=DTR13-m1;
a2=DTR23-m2;
 
plot(a1,'r.-','linewidth',2);%畫NCEP數據DTR折線圖,紅色實線實心點
hold on
plot(a2,'b.-','linewidth',2);
plot(a1-detrend(a1),'r-','linewidth',2);
plot(a2-detrend(a2),'b-','linewidth',2);
legend({'NCEP','Observed'},'Location','Northwest')
set(gca,'xtick',[2 7 12 17 22 27 32]); 
set(gca,'xticklabel',{'1980','1985','1990','1995','2000','2005','2010'}); 
axis([ -inf inf -1 1]);
h=xlabel('Year');
set(h, 'FontSize',8,'FontWeight','Bold')
h=ylabel('Temp. Anom. (\circC)');
set(h, 'FontSize',8,'FontWeight','Bold')
set(gca, 'FontSize',8,'FontWeight','Bold','tickdir','out')
xlim([1 33])%x軸範圍鎖定爲1~33
box off %去掉外框
hold off

結果如下圖所示:
在這裏插入圖片描述

城市區域DTR的異常和趨勢

在這裏插入圖片描述

非城市區域DTR的異常和趨勢

16.5 城市和非城市的DTR的R2和P值

在上面結果的基礎上,增加P值和R2值的計算,並添加斜率方程。

clc;clear
%%摳NCEP數據
%Tmax1、Tmax2、Tmin1、Tmin2:摳出來的兩套中國數據的最高最低值,格式爲72*128*396
%MASK是城市區域掩膜
load('E:\數據\201507\MASK');
load('E:\數據\201501\Tmax1');
load('E:\數據\201501\Tmin1');
DTR1=Tmax1-Tmin1;
 
T10=reshape(DTR1,[72 128 12 33]);
T11=reshape(DTR1,[72 128 12*33]);
T10=squeeze(nanmean(T10,3));
T_mean=squeeze(nanmean(T11,3));
clear DTR1
for i=1:33
DTR1(:,:,i)=squeeze(T10(:,:,i))-T_mean;
end
clear i j T_mean T11 T10 Tmax1 Tmin1
 
T12=DTR1;%刪除邊界區域外的值
for i=1:72
    for j=1:128
if isnan(MASK(i,j))==1
T12(i,j,:)=nan;
end
    end
end
 
T12=reshape(T12,[72*128 33]);
T12=nanmean(T12,1);
NCEP=T12;
p1=polyfit(1:33,T12,1);  % p輸出兩個值第一個是a  第二個是b   y=ax+b
target1=polyval(squeeze(p1(:)),1:33);
clear j i DTR1 T12 
 
 
 
%%
%摳觀測數據
%Tmax1、Tmax2、Tmin1、Tmin2:摳出來的兩套中國數據的最高最低值,格式爲72*128*396
load('E:\數據\201501\Tmax2');
load('E:\數據\201501\Tmin2');
DTR2=Tmax2-Tmin2;
 
T10=reshape(DTR2,[72 128 12 33]);
T11=reshape(DTR2,[72 128 12*33]);
T10=squeeze(nanmean(T10,3));
T_mean=squeeze(nanmean(T11,3));
clear DTR2
for i=1:33
DTR2(:,:,i)=squeeze(T10(:,:,i))-T_mean;
end
clear i j T_mean T11 T10 Tmax2 Tmin2
 
T22=DTR2;%刪除邊界區域外的值
for i=1:72
    for j=1:128
if isnan(MASK(i,j))==1
T22(i,j,:)=nan;
end
    end
end
 
T22=reshape(T22,[72*128 33]);
T22=nanmean(T22,1);
Obs=T22;
p2=polyfit(1:33,T22,1);  % p輸出兩個值第一個是a  第二個是b   y=ax+b
target2=polyval(squeeze(p2(:)),1:33);
clear j i DTR2 T22 
 
%%
%求P值
t=1:33;
t=t';
t=[ones(33,1),t];
NCEP = NCEP';
[b1,bint1,r1,rint1,stats1]= regress(NCEP,t,0.05);
Obs = Obs';
[b2,bint2,r2,rint2,stats2]= regress(Obs,t,0.05);
 
%%
%作圖
plot(NCEP,'r','linewidth',2)
hold on
plot(Obs,'b','linewidth',2)
plot(target1,'r','linewidth',2)%趨勢線
plot(target2,'b','linewidth',2)
 
legend({'NCEP','Observed'},'Location','Northwest')
set(gca,'xtick',[2 7 12 17 22 27 32]); 
set(gca,'xticklabel',{'1980','1985','1990','1995','2000','2005','2010'}); 
axis([ -inf inf -1 1]);
h=xlabel('Year');
set(h, 'FontSize',8,'FontWeight','Bold')
h=ylabel('Temp. Anom. (\circC)');
set(h, 'FontSize',8,'FontWeight','Bold')
set(gca, 'FontSize',8,'FontWeight','Bold','tickdir','out')
xlim([1 33])%x軸範圍鎖定爲1~35
box off %去掉外框
 
%添加斜率方程、R2、P值
h=text(10,-0.7,['y(NCEP)=' num2str(roundn(b1(1,:),-3)) '+' num2str(roundn(b1(2,:),-3)) '*x' '']);
set(h, 'FontSize',10,'FontWeight','Bold')
h=text(10,-0.8,['R^2(NCEP)='  num2str(roundn(stats1(:,1),-2)) '']);
set(h, 'FontSize',10,'FontWeight','Bold')
h=text(10,-0.9,['P(NCEP)='  num2str(roundn(stats1(:,3),-4)) '']);
set(h, 'FontSize',10,'FontWeight','Bold')
 
h=text(23,-0.7,['y(Obs)=' num2str(roundn(b2(1,:),-3)) '+' num2str(roundn(b2(2,:),-3)) '*x' '']);
set(h, 'FontSize',10,'FontWeight','Bold')
h=text(23,-0.8,['R^2(Obs)='  num2str(roundn(stats2(:,1),-2)) '']);
set(h, 'FontSize',10,'FontWeight','Bold')
h=text(23,-0.9,['P(Obs)='  num2str(roundn(stats2(:,3),-4)) '']);
set(h, 'FontSize',10,'FontWeight','Bold')
 
h=text(31,0.9,['(a)']) %添加省份名稱
set(h, 'FontSize',15)
%以上代碼可以用 delete(h) 來撤銷句柄

在這裏插入圖片描述

城市和非城市區域DTR異常和趨勢

相關鏈接:
Matlab處理氣象數據——目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章