function handle=pcbar(loc,clim,begslot,endslot) % PCBAR Displays a partial color bar (color scale). Works just % like COLORBAR, but allows for partial display of the colorbar. % % PCBAR requires the following arguments: % clim - the "restricted" contour limits (min, max % of the data) -- important - not the new clims! % begslot - the beginning index of the part of the concatenated % colormap created (see NEWCLIM) % endslot - the last index of the desired part of the concatenated % colormap used % loc (not required) - the location ('horiz' or 'vert') for % the colorbar (see COLORBAR) % % output vars: % handle - the handle to which the partial colorbar corresponds % % Calls: none % % See also NEWCLIM, a function to trick matlab into letting you use % multiple colormaps on the same figure. % % Last modified: 7 Oct 1999 % Catherine R. Edwards % based on original COLORBAR.M created by % Clay M. Thompson 10-9-92 % % changeNextPlot = 1; if nargin==3 endslot=begslot; begslot=clim; clim=loc; loc = 'vert'; end % Catch colorbar('delete') special case -- must be called by the deleteFcn. if nargin==1 & strcmp(loc,'delete'), ax = gcbo; if strcmp(get(ax,'tag'),'TMW_COLORBAR'), ax=get(ax,'parent'); end ud = get(ax,'userdata'); if isfield(ud,'PlotHandle') & ishandle(ud.PlotHandle) & ... isfield(ud,'origPos') & ~isempty(ud.origPos) units = get(ud.PlotHandle,'units'); set(ud.PlotHandle,'units','normalized'); set(ud.PlotHandle,'position',ud.origPos); set(ud.PlotHandle,'units',units); end if isfield(ud,'DeleteProxy') & ishandle(ud.DeleteProxy) delete(ud.DeleteProxy) end if ~isempty(legend) legend % Update legend end return end ax = []; if nargin==1, if ishandle(loc) ax = loc; if ~strcmp(get(ax,'type'),'axes'), error('Requires axes handle.'); end units = get(ax,'units'); set(ax,'units','pixels'); rect = get(ax,'position'); set(ax,'units',units) if rect(3) > rect(4), loc = 'horiz'; else loc = 'vert'; end changeNextPlot = 0; end end % Determine color limits explicitly. If any axes child is an image % use scale based on size of colormap, otherwise use current CAXIS. ch = get(gcda,'children'); % Treat images and surfaces alike if cdatamapping == 'scaled' t = clim; d = (t(2) - t(1))/(endslot-begslot+1); t = [t(1)+d/2 t(2)-d/2]; h = gcda; if nargin==0, % Search for existing colorbar ch = get(findobj(gcf,'type','image','tag','TMW_COLORBAR'),{'parent'}); ax = []; for i=1:length(ch), ud = get(ch{i},'userdata'); d = ud.PlotHandle; if prod(size(d))==1 & isequal(d,h), ax = ch{i}; pos = get(ch{i},'Position'); if pos(3)0, handle = ax; end %-------------------------------- function h = gcda %GCDA Get current data axes h = datachildren(gcf); if isempty(h) | any(h == gca) h = gca; else h = h(1); end