Global Index (short | long) | Local contents | Local Index (short | long)
hh = dcm2 ( lev , colr ) ;
hh = dcm2 ( lev , colr ) ; This function shades the continents within the existing map frame. Set lev below (above) the minimum (maximum) height of the existing contour map for shaded continents below (above) the existing contour map. Setting lev larger than the highest existing contour will mask out the land.
This function calls | |
---|---|
function hh = dcm2 ( lev , colr ) ; % Get global variables used to control graphics % global x_coasts y_coasts load coast; % fill in the bottom of Antartica tem = find(isnan(long)); tem = tem(1); % OK, this is a major hack, but it works when you shrink the % data to every fifth point (on line 59) nskip = 5; long2 = [NaN; ... long(1)*ones(5,1); long(1:(tem-1)); 180*ones(15,1); ... [180:-1:long(1)]'; ... long(tem:length(long))]; lat2 = [NaN; ... [-89.9:(6.07/5):(lat(1)-6.07/5)]'; ... lat(1:(tem-1)); lat(tem-1)*ones(5,1); ... [(lat(1)-6.07/5):-(6.07/5):-89.9]'; -89.9*ones(366,1); ... lat(tem:length(long))]; if nargin < 2; colr = 0.3; end; x_coasts = [long2']; y_coasts = [lat2']; if nargin < 2; colr = 0.3; end; if nargin < 1; lev = 1; end; if isstr(lev); child = get(gca, 'Children'); plotlev = [0 0]; for i = 1:length(child); zd = get(child(i), 'ZData'); plotlev(1) = max([plotlev(1); zd(:)]); plotlev(2) = min([plotlev(2); zd(:)]); end if strcmp(lev(1), 'o'); lev = plotlev(1)+1; elseif strcmp(lev(1), 'u'); lev = plotlev(2)-1; else error('lev must be over, under, or a number'); end end nans = find(isnan(x_coasts)); xc2 = []; yc2 = []; for i = 2:length(nans); ind = (nans(i-1)+1):nskip:(nans(i)-1); if length(ind) > 2; xc2 = [xc2 NaN x_coasts(ind)]; yc2 = [yc2 NaN y_coasts(ind)]; end end % Require the plot held - though with patchm, it shouldn't matter holdstate = ishold; hold on; % Get existing lon and lat limits xl=getm(gca,'maplonlimit'); yl=getm(gca,'maplatlimit'); x0=xl(1); x1=xl(2); y0=yl(1); y1=yl(2); % Redefine x and y, the outlines of the continents x = []; y = []; nt1 = floor((x0+180)/360); nt2 = floor((x1+180-1.e-9)/360); for it = nt1:nt2; xtmp=xc2+it*360; ytmp=yc2; [tem1, tem2] = maptrimp2(ytmp, xtmp, yl, xl); x = [ x; nan; tem2 ]; y = [ y; nan; tem1 ]; nans = find(isnan(x)); ind = nans(find(diff(nans)==1)+1); lx = 1:length(x); x = x(~ismember(lx, ind)); y = y(~ismember(lx, ind)); end; % Set level y = [y; NaN]; x = [x; NaN]; % Make patches h=patchm(y,x,lev,0.15*[1 1 1]); % Set edges to white -- I can't quite figure out how to get rid of the % nasty lines on the screen if you sent the edgecolor to black. % Any suggestions? set(h, 'EdgeColor', colr*[1 1 1], 'FaceColor', colr*[1 1 1]); % Get rid of hold, if needed if ~ishold; hold off; end % Set output argument if nargout==1; hh=h; end