www.gusucode.com > EasyKrig_V3.0工具箱matlab源码程序 > EasyKrig_V3.0/visualization/dispkrig3d.m

    function 	dispkrig3d(dir_index)
%% function dispkrig3d(dir_index) displays the kriging results based on
%% the option of dir_index 
%% dir_index = 0-3   : 3D kriging results
%%             4:  color-scale slider
%              5:  2D
%              6:  trackline
%%
%%  Kriging Software Package  version 3.0,   May 1, 2004
%%  Copyright (c) 1999, 2001, 2004, property of Dezhang Chu and Woods Hole Oceanographic
%%  Institution.  All Rights Reserved.

global data para hdl


if ~isfield(para.dispkrig.trackline,'dispflag')
    para.dispkrig.trackline.dispflag=0;
end
hdls=findobj(hdl.dispkrig3d.h0,'string','Z');
if data.in.dim == 2
   if ~isempty(hdls)	% previous figure settings are for 3D
      dispkrig3dfig(1);
      dispkrig3d(dir_index);
   end
else
   if isempty(hdls)		% previous figure settings are for 2D
      dispkrig3dfig(1);
      dispkrig3d(dir_index);
   end
end

set(0, 'showhidden', 'on')
ch=get(gcf, 'children');

tools_hdl=findobj(ch,'Label','&Tools');	
rotate_hdl=findobj(tools_hdl,'Label','&Rotate 3D');	
if strcmp(get(rotate_hdl,'Checked'),'on') 
    rotation_checked_flag=1;
    [AZ,EL]=view;
    hdl.dispkrig3d.view_AZ=AZ;
    hdl.dispkrig3d.view_EL=EL;
else
    rotation_checked_flag=0;    
end
set(0, 'showhidden', 'off')

%disp(get(rotate_hdl,'Checked'))
clr_max=64;
DEG2RAD=pi/180;
if para.status.kriging == 1
 %  xgt=data.out.krig.xg*para.dataprep.x_norm./para.dataprep.latlonfac+para.dataprep.x_offset;
 %  ygt=data.out.krig.yg*para.dataprep.y_norm+para.dataprep.y_offset;
   xgt=data.out.krig.xg;
   ygt=data.out.krig.yg;
   if data.in.dim == 3
 %     zgt=data.out.krig.zg*para.dataprep.z_norm+para.dataprep.z_offset;
      zgt=data.out.krig.zg;
   end
else
   xmin=-0.5;xmax=0.5;dx=0.05;
   ymin=-0.5;ymax=0.5;dy=0.05;
   zmin=-0.5;zmax=0.5;dz=0.05;
   xgt=xmin:dx:xmax;
   ygt=ymin:dy:ymax;
   zgt=zmin:dz:zmax;
end

max_xindx=length(xgt);
max_yindx=length(ygt);
if data.in.dim == 3
	max_zindx=length(zgt);
   [X,Y,Z]=meshgrid(xgt,ygt,zgt);
   Z=Z*para.dataprep.z_norm+para.dataprep.z_offset;
	data.out.krig.Zg=Z;
else
   [X,Y]=meshgrid(xgt,ygt);
end   

if isfield(para.dataprep,'fileID')
  set(hdl.dispkrig3d.fileID,'string',para.dataprep.fileID);
end

if ~isfield(para.dataprep,'var1_indx')
    message(1,'There are no data to diaplay !!!');
    return
end
%if get(hdl.dataprep.var1,'value') == 1 & get(hdl.dataprep.var2,'value') == 2  %y-axis -> Lat
if para.dataprep.var1_indx == 1 & para.dataprep.var2_indx == 2  %y-axis -> Lat
	Y=Y*para.dataprep.y_norm+para.dataprep.y_offset;			% latitude in degrees
  	X=X./cos(Y*DEG2RAD);
	X=X*para.dataprep.x_norm+para.dataprep.x_offset;		 
    %elseif get(hdl.dataprep.var1,'value') == 2 & get(hdl.dataprep.var2,'value') == 1  %x-axis -> Lat															  
elseif para.dataprep.var1_indx == 2 & para.dataprep.var2_indx == 1  %x-axis -> Lat															  
	X=X*para.dataprep.x_norm+para.dataprep.x_offset;		 	% latitude in degrees
  	Y=Y./cos(X*DEG2RAD);
    Y=Y*para.dataprep.y_norm+para.dataprep.y_offset;			
else
    X=X*para.dataprep.x_norm+para.dataprep.x_offset;		 
    Y=Y*para.dataprep.y_norm+para.dataprep.y_offset;			
end   

data.out.krig.Xg=X;
data.out.krig.Yg=Y;
Xgt=squeeze(mean(X(:,:,1)))';
Ygt=squeeze(Y(:,1,1));
data.out.krig.Xgt=Xgt;
data.out.krig.Ygt=Ygt;

if data.in.dim == 3
  Zgt=squeeze(Z(1,1,:));
  data.out.krig.Zgt=Zgt;
end 

switch hdl.dispkrig3d.var_index
case 1
   DispVar=data.out.krig.Vg;
case 2
   DispVar=data.out.krig.Eg;
case 3
   disp_str={'Show Plot is not valid for Validation.',
          '  ',
        'It is only valid for displaying Krig Map or Variance Map!'};
   message(2,disp_str);
   return
end

if para.Matlab_Version == 7
  if data.in.dim == 3
    hori_size=0.5; 
    hori_x0=0.1;
    hori_clrbar=1.45;
  else      
    hori_size=0.6;
    hori_x0=0.15;
    hori_clrbar=1.15;
  end
else
  if data.in.dim == 3
    hori_size=0.6;
    hori_x0=0.15;
    hori_clrbar=1.4;
  else
    hori_size=0.6;
    hori_x0=0.15;
    hori_clrbar=1.3;
  end
end   

%% dir_index = 0-3 is for 3D display
if dir_index == 0| dir_index == 5
   %%% plot kriging map
%	delete(findobj(hdl.dispkrig3d.h0,'Tag','dispkrig3dAxes1'));
 	figure(hdl.dispkrig3d.h0)
  	delete(findobj(hdl.dispkrig3d.h0,'Tag','colorbar1'));
    delete(hdl.dispkrig3d.axes1);
	hdl.dispkrig3d.axes1 = axes('Parent',hdl.dispkrig3d.h0, ...
	'Color',[1 1 1], ...
    'Tag','dispkrig3dAxes1', ...
	'Position',[hori_x0 0.4 hori_size 0.5]);
end

switch dir_index		
  case 0								% initial 3D plot
	xmax=max(data.out.krig.Xgt);
	xmin=min(data.out.krig.Xgt);
    slice_index=round(max_xindx/2);
    xdir_val=(xmax-xmin)*slice_index/max_xindx+xmin;
    xdir_val_norm=(xdir_val-xmin)/(xmax-xmin);
    slice(X,Y,Z,DispVar,[Xgt(slice_index)],[Ygt(1)] ,[Zgt(max_zindx)])
    set(hdl.dispkrig3d.xdir_slider,'value',xdir_val_norm);
    set(hdl.dispkrig3d.ydir_slider,'value',0);
    set(hdl.dispkrig3d.zdir_slider,'value',0);
    set(hdl.dispkrig3d.xdir_val,'string',sprintf('%6.5g',xdir_val));
    set(hdl.dispkrig3d.ydir_val,'string',sprintf('%6.5g',min(data.out.krig.Ygt)));
    set(hdl.dispkrig3d.zdir_val,'string',sprintf('%6.5g',max(data.out.krig.Zgt)));
    hdl.dispkrig3d.xindx=slice_index;
    hdl.dispkrig3d.yindx=1;
    hdl.dispkrig3d.zindx=max_zindx;
    set(gca,'zdir','reverse');
    switch hdl.dispkrig3d.shading_index
    case 1
      shading faceted
    case 2
	  shading flat
    case 3
      shading interp
    end
  case 1							% x-dirction
	xmax=max(data.out.krig.Xgt);
	xmin=min(data.out.krig.Xgt);
	slice_index=round(min(max_xindx,max(1,max_xindx*get(hdl.dispkrig3d.xdir_slider,'value'))));
    xdir_val=(xmax-xmin)*slice_index/max_xindx+xmin;
    slice(X,Y,Z,DispVar,[Xgt(slice_index)],[Ygt(hdl.dispkrig3d.yindx)] ,[Zgt(hdl.dispkrig3d.zindx)])
 	set(hdl.dispkrig3d.xdir_val,'String',sprintf('%6.5g',xdir_val));
    hdl.dispkrig3d.xindx=slice_index;
    switch hdl.dispkrig3d.shading_index
    case 1
      shading faceted
    case 2
	  shading flat
    case 3
      shading interp
    end
  case 2							% y-dirction
	ymin=min(data.out.krig.Ygt);
	ymax=max(data.out.krig.Ygt);
	slice_index=round(min(max_yindx,max(1,max_yindx*get(hdl.dispkrig3d.ydir_slider,'value'))));
    ydir_val=(ymax-ymin)*slice_index/max_yindx+ymin;
    slice(X,Y,Z,DispVar,[Xgt(hdl.dispkrig3d.xindx)],[Ygt(slice_index)] ,[Zgt(hdl.dispkrig3d.zindx)])
  	set(hdl.dispkrig3d.ydir_val,'String',sprintf('%6.5g',ydir_val));
    hdl.dispkrig3d.yindx=slice_index;
    switch hdl.dispkrig3d.shading_index
    case 1
      shading faceted
    case 2
	  shading flat
    case 3
      shading interp
    end
  case 3							% z-dirction
	zmax=max(data.out.krig.Zgt);
	zmin=min(data.out.krig.Zgt);
	slice_index=round(min(max_zindx,max(1,max_zindx*(1-get(hdl.dispkrig3d.zdir_slider,'value')))));
    zdir_val=(zmax-zmin)*slice_index/max_zindx+zmin;
    slice(X,Y,Z,DispVar,[Xgt(hdl.dispkrig3d.xindx)],[Ygt(hdl.dispkrig3d.yindx)] ,[Zgt(slice_index)])
    set(hdl.dispkrig3d.zdir_val,'String',sprintf('%6.5g',zdir_val));
    hdl.dispkrig3d.zindx=slice_index;
    switch hdl.dispkrig3d.shading_index
    case 1
      shading faceted
    case 2
	  shading flat
    case 3
      shading interp
    end
  case 4							% colorbar slider
    var1=get(hdl.dispkrig3d.cbar_slider_bot,'value');  
    var2=get(hdl.dispkrig3d.cbar_slider_top,'value');  
    max_var=max(max(max(DispVar)));
    min_var=min(min(min(DispVar)));
    step=(max_var-min_var)/100;
    disp_var1=min_var+(max_var-min_var)*var1;
    disp_var2=max_var-(max_var-min_var)*(1-var2);
    caxis([disp_var1 disp_var2]);
    switch hdl.dispkrig3d.shading_index
    case 1
      shading faceted
    case 2
	  shading flat
    case 3
      shading interp
    end
  case 5   	%%%%%%%% 2D display  %%%%%%%%%%%%%%%%%%%%%
   pcolor(X,Y,DispVar);
   switch hdl.dispkrig3d.shading_index
   case 1
      shading faceted
   case 2
	  shading flat
   case 3
      shading interp
   end
   hold on
   if hdl.dispkrig3d.var_index  == 1   % kriged variable
 	  var=data.in.tv;
   else
 	  var=data.out.krig.err;
   end
   vcontour=auto_contour(var,para.dispkrig.num_of_contour,para.dispkrig.digits_of_contour);
%   cmap=colormap;
   if ~isempty(vcontour)
  		if isnan(vcontour) 
    		[c,H]=contour(X,Y,DispVar,'k');
  		else
    		[c,H]=contour(X,Y,DispVar,vcontour,'k');
  		end
  		hh=clabel(c,H);
   end
  case 6    %%%%%%%%% plot data on tracklines or values on ustomized grids
  % doing nothing
  otherwise
end

%% plot customized grid data
if para.krig.load_griddata_file == 1
   hold on
   cmap=colormap;
   ngd=length(data.out.krig.gx);
   if data.in.dim == 2                              % 2D grids
   %% plot color-coded values on the customized grids
      if hdl.dispkrig3d.var_index  == 1   % kriged variable
         data.out.krig.gv=griddata(X,Y,data.out.krig.Vg,data.out.krig.gx,data.out.krig.gy);
         var_gd=data.out.krig.gv;
      else											% kriging variance
         data.out.krig.ge=griddata(X,Y,data.out.krig.Eg,data.out.krig.gx,data.out.krig.gy);
         var_gd=data.out.krig.ge;
      end    
      if para.dispkrig.trackline.dispflag == 1
        cmap=colormap;
        markersize=para.dispkrig.markersize;
        Vmax=max(max(max(DispVar)));
        Vmin=min(min(min(DispVar)));
        clr_gd=min(max(floor(clr_max*(var_gd-Vmin)/(Vmax-Vmin)),0)+1,clr_max);
	    inc_gd=max(1,round(ngd/1600));
        ni=1;
 	    for i=1:inc_gd:ngd
   		  hdl.dispkrig3d.trackline.hxy(ni)=plot(data.out.krig.gx(i),data.out.krig.gy(i),'.','color',cmap(clr_gd(i),:),'markersize',para.dispkrig.customized_grid_data_markersize);
          ni=ni+1;
	    end   
      end
   else                                                 % 3D grids
   %% plot color-coded values on the customized grids
      if hdl.dispkrig3d.var_index  == 1   % kriged variable
         data.out.krig.gv=griddata(X,Y,Z,data.out.krig.Vg,data.out.krig.gx,data.out.krig.gy,data.out.krig.gy);
         var_gd=data.out.krig.gv;
      else											% kriging variance
         data.out.krig.ge=griddata(X,Y,Z,data.out.krig.Eg,data.out.krig.gx,data.out.krig.gy,data.out.krig.gy);
         var_gd=data.out.krig.ge;
      end    
      if para.dispkrig.trackline.dispflag == 1
        cmap=colormap;
        markersize=para.dispkrig.markersize;
        Vmax=max(max(max(DispVar)));
        Vmin=min(min(min(DispVar)));
        clr_gd=min(max(floor(clr_max*(var_gd-Vmin)/(Vmax-Vmin)),0)+1,clr_max);
	    inc_gd=max(1,round(ngd/1600));
        ni=1;
 	    for i=1:inc_gd:ngd
   		  hdl.dispkrig3d.trackline.hxy(ni)=plot3(data.out.krig.gx(i),data.out.krig.gy(i),data.out.krig.gy(i),'.','color',cmap(clr_gd(i),:),'markersize',para.dispkrig.customized_grid_data_markersize);
          ni=ni+1;
 	    end   
      end
   end
end

% Plot track line
if para.dispkrig.trackline.dispflag == 1
  if isfield(hdl.dispkrig3d.trackline,'hxy') & ~isempty(hdl.dispkrig3d.trackline.hxy)
      if ishandle(hdl.dispkrig3d.trackline.hxy)
         delete(hdl.dispkrig3d.trackline.hxy);
      end
      hdl.dispkrig3d.trackline.hxy=[];
  end
  if isfield(hdl.dispkrig3d.trackline,'htxt')& ~isempty(hdl.dispkrig3d.trackline.htxt)
      if  ~isempty(find(ishandle(hdl.dispkrig3d.trackline.htxt) ==1))
         delete(hdl.dispkrig3d.trackline.htxt);
      end
      hdl.dispkrig3d.trackline.htxt=[];
  end

    hold on
    cmap=colormap;
    markersize=para.dispkrig.markersize;
    Vmax=max(max(max(DispVar)));
    Vmin=min(min(min(DispVar)));
    if hdl.dispkrig3d.var_index  == 1   % kriged variable
 	   var=data.in.tv;
	   clr=min(max(floor(clr_max*(var-Vmin)/(Vmax-Vmin)),0)+1,clr_max);
	   TrackLineType=para.dispkrig.trackline.type_indx;
 	   TrackLineColor=para.dispkrig.trackline.line_color;
    else								   % kriging variance
 	   var=data.out.krig.err;
	   TrackLineType=2;
       TrackLineColor=1;
    end
	n=length(data.in.x0);
	inc=max(1,round(n/1600));
	track_color='ymcrgbwk';
	clr_indx=TrackLineColor+6;
    if data.in.dim == 2                         % 2D track-line
	  switch TrackLineType 
		case 1			% color-coded tracklines
            ni=1;
 			for i=1:inc:n
   			   hdl.dispkrig3d.trackline.hxy(ni)=plot(data.in.x0(i),data.in.y0(i),'.','color',cmap(clr(i),:),'markersize',markersize);
               ni=ni+1;
 			end
   	    case 2		% black/white tracklines
  			if n >= 100000
    			hdl.dispkrig3d.trackline.hxy=plot(data.in.x0,data.in.y0,['-' track_color(clr_indx)],'linewidth',2.5);
  			else
    			hdl.dispkrig3d.trackline.hxy=plot(data.in.x0,data.in.y0,['.' track_color(clr_indx)],'markersize',markersize);
  			end
		case 3		% attribute values
  			hdl.dispkrig3d.trackline.hxy=plot(data.in.x0,data.in.y0,['.' track_color(clr_indx)],'markersize',markersize);
  			hdl.dispkrig3d.trackline.htxt=text(data.in.x0,data.in.y0,num2str(var));
  			set(hdl.dispkrig3d.trackline.htxt,'fontsize',para.dispkrig.trackline.size_indx,'color',track_color(para.dispkrig.trackline.color_indx));
		case 4		% difference between observed and kriged attribute values 
            Is=griddata(X,Y,DispVar,data.in.x0,data.in.y0);
  			hdl.dispkrig3d.trackline.hxy=plot(data.in.x0,data.in.y0,['.' track_color(clr_indx)],'markersize',markersize);
  			hdl.dispkrig3d.trackline.htxt=text(data.in.x0,data.in.y0,num2str(var-Is));
  			set(hdl.dispkrig3d.trackline.htxt,'fontsize',para.dispkrig.trackline.size_indx,'color',track_color(para.dispkrig.trackline.color_indx));
	    end
    else                                         % 3D track-line
	  switch TrackLineType 
		case 1			% color-coded tracklines
            ni=1;
 			for i=1:inc:n
   			   hdl.dispkrig3d.trackline.hxy(ni)=plot3(data.in.x0(i),data.in.y0(i),data.in.z0(i),'.','color',cmap(clr(i),:),'markersize',markersize);
               ni=ni+1;
 			end
   	    case 2		% black/white tracklines
  			if n >= 100000
    			hdl.dispkrig3d.trackline.hxy=plot3(data.in.x0,data.in.y0,data.in.z0,['-' track_color(clr_indx)],'linewidth',2.5);
  			else
    			hdl.dispkrig3d.trackline.hxy=plot3(data.in.x0,data.in.y0,data.in.z0,['.' track_color(clr_indx)],'markersize',markersize);
  			end
		case 3		% attribute values
            message(1,'Not an valid option !!')
		case 4		% difference between observed and kriged attribute values 
            message(1,'Not an valid option !!')
      end   
   end  
else
  if isfield(hdl.dispkrig3d.trackline,'hxy') & ~isempty(hdl.dispkrig3d.trackline.hxy)
      delete(hdl.dispkrig3d.trackline.hxy);
      hdl.dispkrig3d.trackline.hxy=[];
  end
  if isfield(hdl.dispkrig3d.trackline,'htxt') & ~isempty(hdl.dispkrig3d.trackline.htxt)
      delete(hdl.dispkrig3d.trackline.htxt);
      hdl.dispkrig3d.trackline.htxt=[];
  end
end                 % end of displsy_trackline

if dir_index ~= 4 & dir_index ~= 6
	if para.dataprep.var1_indx <= 2 | para.dataprep.var2_indx <= 2	% either x or y is Lat or Long
     ntick=4;
     [xinc,xdits,yinc,ydits]=get_ninc(hdl.dispkrig3d.axes1,ntick);
	  if para.dataprep.var1_indx <= 2
       mapax(xinc,xdits,yinc,ydits,hdl.dispkrig3d.axes1,1);		% x-axis label
	  end
	  if para.dataprep.var2_indx <= 2
       mapax(xinc,xdits,yinc,ydits,hdl.dispkrig3d.axes1,2);		% y-axis label
	  end
	end
end

if get(hdl.dispkrig3d.xdir_reverse,'value') == 1
   set(hdl.dispkrig3d.axes1,'xdir','reverse');
end
if get(hdl.dispkrig3d.ydir_reverse,'value') == 1
   set(hdl.dispkrig3d.axes1,'ydir','reverse');
end
if data.in.dim == 3
 if get(hdl.dispkrig3d.zdir_reverse,'value') == 1
     set(hdl.dispkrig3d.axes1,'zdir','reverse');
 end
end

%%% color bar and color scale
if isfield(hdl.dispkrig3d,'colorbar') & ishandle(hdl.dispkrig3d.colorbar) 
    delete(hdl.dispkrig3d.colorbar);
end
hdl.dispkrig3d.colorbar=colorbar;
set(hdl.dispkrig3d.colorbar,'Position',[0.85 0.4 0.045 0.5],'Tag','colorbar1');

xlabelstr=para.dataprep.xlabel;
ylabelstr=para.dataprep.ylabel;
hx=xlabel(xlabelstr);
hy=ylabel(ylabelstr);


if data.in.dim == 3
	zlabelstr=para.dataprep.zlabel;
	hz=zlabel(zlabelstr);
	set([hx hy hz],'fontsize',12,'fontweight','bold')
	set(hx,'Rotation',16);
    set(hy,'Rotation',-27);
else
	set([hx hy],'fontsize',12,'fontweight','bold')
end

hcs=text(hori_clrbar,1.1,'Color Scale','sc');
set(hcs,'fontsize',10,'fontweight','bold');

if 0
switch hdl.dispkrig3d.shading_index
 case 1
   shading faceted
 case 2
	shading flat
 case 3
   shading interp
end
end

drawnow
hold off
if rotation_checked_flag == 1
    view(hdl.dispkrig3d.view_AZ,hdl.dispkrig3d.view_EL);
end