天天看點

Matlab——m_map指南(4)——執行個體

1、 全球/地區溫度圖

(1)讀取資料

clear all
setup_nctoolbox %調用工具包
tic %計時
%% 
nc=ncgeodataset('tmpsfc.gdas.199401.grb2');   %讀檔案
tem_1=nc.variables   %浏覽資料類型
%% 
a1=nc.geovariable(tem_1(1));%取得資料類型為Temperature_surface的資料
b1=a1.data(1,:,:); %第一個時間點溫度資料
c1=squeeze(b1)-273.16;%删除單一次元,換為攝氏溫度
%% 
a2=nc.geovariable(tem_1(2));%取得資料類型為lat的資料,緯度
b2=a2.data(:,1)%提取資料
%% 
a3=nc.geovariable(tem_1(3));%經度
b3=a3.data(:,1)%
%% 
a4=nc.geovariable(tem_1(4));%取得資料類型為time的資料
b4=a4.data(:,1)%
%% 
save A b2 b3 c1
toc
           

讀取的是NCEP/CFSR資料,1994年1月的溫度資料。

Matlab——m_map指南(4)——執行個體

該資料一共四項。溫度,緯度,經度,時間。溫度中是3維資料組織形式

Matlab——m_map指南(4)——執行個體

時間資料

Matlab——m_map指南(4)——執行個體

經度資料

Matlab——m_map指南(4)——執行個體

緯度資料

Matlab——m_map指南(4)——執行個體

可以看出該資料集的資料組織形式,經度緯度構成世界地圖,記錄了744個時間點的溫度資料。1小時采集一次資料。

溫度資料

Matlab——m_map指南(4)——執行個體

儲存為mat格式資料,為畫圖做準備。

(2)畫圖

clear all
load A

[Plg,Plt]=meshgrid(b3',b2');%形成網格

 m_proj('hammer-aitoff','clongitude',-150);%投影模式

m_pcolor(Plg,Plt,c1);
shading flat;
colormap('jet');%顔色選擇
hold on;
m_pcolor(Plg-360,Plt,c1);
shading flat; %着色模式
colormap('jet');

m_coast();
m_grid('xaxis','middle');

% h=colorbar('h');
% set(get(h,'title'),'string','1991年1月全球溫度');

c=colorbar('southoutside','fontsize',12)
c.Label.String = '1994年1月全球溫度';
c.Label.FontSize = 15;
           
Matlab——m_map指南(4)——執行個體

(3)找出最大、最小溫度的經緯度

clear all
load C
Max_col=max(c1);%列最大值
Max_row=max(c1,[],2)%行最大值
Max=max(max(c1));
[x1,y1]=find(c1==max(max(c1)));%x 行,y 列
T_1=Plt(x1,y1)%緯度
T_2=Plg(x1,y1)%經度

Min_col=min(c1);%列最大值
Min_row=min(c1,[],2)%行最大值
Min=min(min(c1));
[x,y]=find(c1==min(min(c1)));%x 行,y 列
T_x=Plt(x,y)%緯度
T_y=Plg(x,y)%經度
           

 

Matlab——m_map指南(4)——執行個體

可以看出最熱52度,在澳洲那塊(142.8123E,23.2610S);最冷-62度,在北極圈那塊(89.9999E,66.3486N)。

(4)中國(地區)溫度圖

clear all
load A

LATLIMS=[3 54];
LONLIMS=[72 134];%標明邊界範圍

[Plg,Plt]=meshgrid(b3',b2');%形成網格

 m_proj('lambert','lon',LONLIMS,'lat',LATLIMS);%投影模式

m_pcolor(Plg,Plt,c1);
shading flat;
colormap('jet');%顔色選擇
hold on;
m_pcolor(Plg-360,Plt,c1);
shading flat; %着色模式
colormap('jet');

m_coast();
m_grid('box','fancy','tickdir','in');

% h=colorbar('h');
% set(get(h,'title'),'string','1991年1月全球溫度');

c=colorbar('southoutside','fontsize',12)
c.Label.String = '1994年1月中國溫度';
c.Label.FontSize = 15;
           
Matlab——m_map指南(4)——執行個體

該方法是讀取全球資料,隻展示部分

(5)

改進的區域方法,讀取該區域的資料資料,

clear all
setup_nctoolbox %調用工具包
tic %計時
%% 
min_lat=115;
max_lat=279;
min_lon=231;
max_lon=430;  %區域經緯度範圍,在資料中的位置

%% 
nc=ncgeodataset('tmp2m.gdas.199401.grb2');   %讀檔案
tem_1=nc.variables   %浏覽資料類型
%% 
N1=nc.size(tem_1(1));%讀取資料大小,可以看出資料的組織形式
a1=nc.geovariable(tem_1(1));%取得資料類型為Temperature_surface的資料
b1=a1.data(1,1,min_lat:max_lat,min_lon:max_lon); %第一個時間點溫度資料
c1=squeeze(b1)-273.16;%删除單一次元,換為攝氏溫度
%% 
N2=nc.size(tem_1(2));
a2=nc.geovariable(tem_1(2));%取得資料類型為lat的資料,緯度
b2=a2.data(min_lat:max_lat,1);%提取資料
%% 
N3=nc.size(tem_1(3))
a3=nc.geovariable(tem_1(3));%經度
b3=a3.data(min_lon:max_lon,1);%
%% 
N4=nc.size(tem_1(4))
a4=nc.geovariable(tem_1(4));%取得資料類型為time的資料
b4=a4.data(:,1);%
%% 
N5=nc.size(tem_1(5));%讀取資料大小
a5=nc.geovariable(tem_1(5));%取得資料類型為time的資料
b5=a5.data(:,1);%
%% 
save tem b2 b3 c1
toc
           
Matlab——m_map指南(4)——執行個體
clear all
load tem

LATLIMS=[3 54];
LONLIMS=[72 134];%標明邊界範圍

[Plg,Plt]=meshgrid(b3',b2');%形成網格

 m_proj('lambert','lon',LONLIMS,'lat',LATLIMS);%投影模式

m_pcolor(Plg,Plt,c1);
shading flat;
colormap('jet');%顔色選擇
hold on;
m_pcolor(Plg-360,Plt,c1);
shading flat; %着色模式
colormap('jet');

m_coast();
m_grid('box','fancy','tickdir','in');

% h=colorbar('h');
% set(get(h,'title'),'string','1991年1月全球溫度');

c=colorbar('southoutside','fontsize',12)
c.Label.String = '1994年1月中國溫度';
c.Label.FontSize = 15;
           
Matlab——m_map指南(4)——執行個體
Matlab——m_map指南(4)——執行個體

(6)讀取方式的改變

clear all
setup_nctoolbox %調用工具包
tic %計時
%% 
min_lat=115;
max_lat=279;
min_lon=231;
max_lon=430;  %區域經緯度範圍,在資料中的位置

%% 
nc=ncgeodataset('tmp2m.gdas.199401.grb2');   %讀檔案
tem_1=nc.variables   %浏覽資料類型

%% 
N1=nc.size(tem_1(1));%讀取資料大小
b1=nc.data(tem_1(1),[1,1,min_lat,min_lon],[1,1,max_lat,max_lon]);%初始的讀取位置,最終的位置
c1=squeeze(b1)-273.16;
%% 
N2=nc.size(tem_1(2));%讀取資料大小
b2=nc.data(tem_1(2),[min_lat],[max_lat]);
%% 
N3=nc.size(tem_1(3));%讀取資料大小
b3=nc.data(tem_1(3),[min_lon],[max_lon]);
save tem b2 b3 c1
toc
           
Matlab——m_map指南(4)——執行個體

可以看出海面2米的溫度組織形式,4維資料,包含了744個時間點,1個位置,576個緯度點,1152個經度點。

讀取方式是初始位置用一個數組表示,終止位置用一個數組表示

clear all
load tem

LATLIMS=[3 54];
LONLIMS=[72 134];%標明邊界範圍

[Plg,Plt]=meshgrid(b3',b2');%形成網格

 m_proj('lambert','lon',LONLIMS,'lat',LATLIMS);%投影模式

m_pcolor(Plg,Plt,c1);
shading flat;
colormap('jet');%顔色選擇
hold on;
m_pcolor(Plg-360,Plt,c1);
shading flat; %着色模式
colormap('jet');

m_coast();
m_grid('box','fancy','tickdir','in');

% h=colorbar('h');
% set(get(h,'title'),'string','1991年1月全球溫度');

c=colorbar('southoutside','fontsize',12)
c.Label.String = '1994年1月中國溫度';
c.Label.FontSize = 15;
           
Matlab——m_map指南(4)——執行個體

(7)多個時間的平均值

clear all
setup_nctoolbox %調用工具包
tic %計時
%%
min_lat=115;
max_lat=279;
min_lon=231;
max_lon=430;  %區域經緯度範圍,在資料中的位置
 
%%
nc=ncgeodataset('tmp2m.gdas.199401.grb2');   %讀檔案
tem_1=nc.variables   %浏覽資料類型
N1=nc.size(tem_1(1));%讀取資料大小
d=zeros(1,165,200);%預定義最後的數值存放空間
f=0%驗證預留數
%%
for n=1:10  %選取10個時間點
    b1=nc.data(tem_1(1),[n,1,min_lat,min_lon],[n,1,max_lat,max_lon]);%初始的讀取位置,最終的位置
    c(n,:,:)=squeeze(b1)-273.16;
    d=d+c(n,:,:); %最終結果
end
for n=1:10
    f=f+c(n,1,1);
end
e=squeeze(d);
% save tem 
toc
           
Matlab——m_map指南(4)——執行個體
Matlab——m_map指南(4)——執行個體

f值等于e的第一個值,說明計算正确.最後計算平均值即可。 

2、風向

(1)資料讀取

clear all
setup_nctoolbox
tic
%% 讀取資料檔案
wind= ncgeodataset('wnd10m.gdas.199401.grb2');
wind_list = wind.variables;%檔案的清單情況
%% 
size_of_u = wind.size(wind_list(1));%u分量的資料尺寸,777小時,1個高度,經緯度資料,4D資料
data_u=wind.geovariable(wind_list(1));%取得資料類型為風速u的資料
u_1=data_u.data(1,1,:,:); %
u_2=squeeze(u_1);
%% 
size_of_v = wind.size(wind_list(2));%v分量的資料尺寸,777小時,1個高度,經緯度資料,4D資料
data_v=wind.geovariable(wind_list(2));%取得資料類型為風速v的資料
v_1=data_v.data(1,1,:,:); %
v_2=squeeze(v_1);
%% 
size_of_h= wind.size(wind_list(5));%v分量的資料尺寸,777小時,1個高度,經緯度資料,4D資料
data_h=wind.geovariable(wind_list(5));%取得資料類型為風速v的資料
v_1=data_h.data(1); %高度10米
%% 
wind_speed=sqrt(u_2.^2+v_2.^2);  %矢量合成
save wind u_2 v_2 wind_speed
toc
           
Matlab——m_map指南(4)——執行個體

(2)展示

clear all
load lon_lat %載入坐标資料
load wind  %載入風速資料

LATLIMS=[3 15];
LONLIMS=[115 134];%標明邊界範圍

m_proj('lambert','lon',LONLIMS,'lat',LATLIMS);%投影模式

min_lat=115;
max_lat=279;
min_lon=231;
max_lon=430; 
 
m_coast;
m_grid('box','fancy','tickdir','in');%邊緣經緯度寬度
hold on;%圖層合并
m_quiver(Plg(min_lat:max_lat,min_lon:max_lon),Plt(min_lat:max_lat,min_lon:max_lon),...
    u_2(min_lat:max_lat,min_lon:max_lon),v_2(min_lat:max_lat,min_lon:max_lon)...
    ,7.5,'r');%經度,緯度,向東,向北的速度分量,轉化為矢量箭頭
xlabel('global surface winds 1994/01');
           
Matlab——m_map指南(4)——執行個體
Matlab——m_map指南(4)——執行個體

(3)

clear all
load lon_lat
load wind

m_proj('hammer-aitoff','clongitude',-150);%投影模式

m_quiver(Plg,Plt,u_2,v_2,15,'r');
shading flat;
colormap('jet');%顔色選擇
hold on;
m_quiver(Plg-360,Plt,u_2,v_2,15,'r');
shading flat; %着色模式
colormap('jet');

m_coast();
m_grid('xaxis','middle');

xlabel('global surface winds 1994/01');
           
Matlab——m_map指南(4)——執行個體

  

3、氣壓

(1)一個時間點的氣壓

clear all
clear all
setup_nctoolbox
tic
%% 讀取資料檔案
pre= ncgeodataset('pressfc.gdas.199401.grb2');
pre_list = pre.variables;%檔案的清單情況
%% 
size_of_pre = pre.size(pre_list(1));%620小時,576緯度,1152經度
pre_1=pre.data(pre_list(1),[1,1,1],[1,576,1152]); %
pre_2=squeeze(pre_1);
%% 
size_of_2 = pre.size(pre_list(2));%v分量的資料尺寸,777小時,1個高度,經緯度資料,4D資料
size_of_3 = pre.size(pre_list(3));
size_of_4 = pre.size(pre_list(4));
size_of_5 = pre.size(pre_list(5));
size_of_8 = pre.size(pre_list(8));
t_4=pre.data(pre_list(4),1,620); 
t_8=pre.data(pre_list(8),1:124);
toc
           
Matlab——m_map指南(4)——執行個體
Matlab——m_map指南(4)——執行個體
Matlab——m_map指南(4)——執行個體
Matlab——m_map指南(4)——執行個體

可以看出時間點交錯開了,是以最終處理資料時還要按順序排列起來。

clear all
load lon_lat
load pre
 m_proj('hammer-aitoff','clongitude',-150);%投影模式

m_pcolor(Plg,Plt,pre_2);
shading flat;
colormap('jet');%顔色選擇
hold on;
m_pcolor(Plg-360,Plt,pre_2);
shading flat; %着色模式
colormap('jet');

m_coast();
m_grid('xaxis','middle');

% h=colorbar('h');
% set(get(h,'title'),'string','1991年1月全球溫度');

c=colorbar('southoutside','fontsize',12)
c.Label.String = '1994年1月全球氣壓';
c.Label.FontSize = 15;
           
Matlab——m_map指南(4)——執行個體

 (2)

clear all
setup_nctoolbox
tic
%% 讀取資料檔案
pre= ncgeodataset('pressfc.gdas.199401.grb2');
pre_list = pre.variables;%檔案的清單情況
size_of_1 = pre.size(pre_list(1));%620小時,576緯度,1152經度
size_of_2 = pre.size(pre_list(2));%v分量的資料尺寸,777小時,1個高度,經緯度資料,4D資料
size_of_3 = pre.size(pre_list(3));
size_of_4 = pre.size(pre_list(4));
size_of_5 = pre.size(pre_list(5));
size_of_8 = pre.size(pre_list(8));

t_4=pre.data(pre_list(4),1,620); 
t_8=pre.data(pre_list(8),1:124);

pre_sum=zeros(744,576,1152);
%% 
for n=1:744
    if mod(n-1,6)==0  %取餘數
        a=floor(n/6);
        n_time=n-a*5;%下标位置
        pre_sum(n,:,:)=pre.data(pre_list(5),[n_time,1,1],[n_time,576,1152]); %
    else
        a=floor((n-1)/6);
        n_time=n-a-1;%下标位置
        pre_sum(n,:,:)=pre.data(pre_list(1),[n_time,1,1],[n_time,576,1152]);
    end  
end  
%% end

pre_data=squeeze(mean(pre_sum))%求平均值

save pre_data_199401 pre_data
toc
           
Matlab——m_map指南(4)——執行個體

綜合運用餘數和向下取整的方法,每隔五個從另外的資料中取一個數。最後用mean()函數求平均值。

4、濕度

  

  

  

  

  

  

  

  

  

 

轉載于:https://www.cnblogs.com/ruo-li-suo-yi/p/7762721.html

繼續閱讀