Global Index (all files) (short | long) | Local Index (files in subdir) (short | long)
handle=colorbar(loc)
COLORBAR Display color bar (color scale).
COLORBAR('vert') appends a vertical color scale to the current
axis. COLORBAR('horiz') appends a horizontal color scale.
COLORBAR(H) places the colorbar in the axes H. The colorbar will
be horizontal if the axes H width > height (in pixels).
COLORBAR without arguments either adds a new vertical color scale
or updates an existing colorbar.
H = COLORBAR(...) returns a handle to the colorbar axis.
| This function is called by | |
|---|---|
function handle=colorbar(loc)
% Clay M. Thompson 10-9-92
% Copyright (c) 1984-98 by The MathWorks, Inc.
% $Revision: 5.27 $ $Date: 1997/12/18 17:04:01 $
% If called with COLORBAR(H) or for an existing colorbar, don't change
% the NextPlot property.
changeNextPlot = 1;
if nargin<1, 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)
set(ud.PlotHandle,'position',ud.origPos);
end
if isfield(ud,'DeleteProxy') & ishandle(ud.DeleteProxy)
delete(ud.DeleteProxy)
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 by context. If any axes child is an image
% use scale based on size of colormap, otherwise use current CAXIS.
ch = get(gca,'children');
hasimage = 0; t = [];
cdatamapping = 'direct';
for i=1:length(ch),
typ = get(ch(i),'type');
if strcmp(typ,'image'),
hasimage = 1;
cdatamapping = get(ch(i), 'CDataMapping');
elseif strcmp(typ,'surface') & ...
strcmp(get(ch(i),'FaceColor'),'texturemap') % Texturemapped surf
hasimage = 2;
cdatamapping = get(ch(i), 'CDataMapping');
elseif strcmp(typ,'patch') | strcmp(typ,'surface')
cdatamapping = get(ch(i), 'CDataMapping');
end
end
if ( strcmp(cdatamapping, 'scaled') )
% Treat images and surfaces alike if cdatamapping == 'scaled'
t = caxis;
d = (t(2) - t(1))/size(colormap,1);
t = [t(1)+d/2 t(2)-d/2];
else
if hasimage,
t = [1, size(colormap,1)];
else
t = [1.5 size(colormap,1)+.5];
end
end
h = gca;
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)<pos(4), loc = 'vert'; else loc = 'horiz'; end
changeNextPlot = 0;
% Make sure image deletefcn doesn't trigger a colorbar('delete')
% for colorbar update
set(get(ax,'children'),'deletefcn','')
break;
end
end
end
origNextPlot = get(gcf,'NextPlot');
if strcmp(origNextPlot,'replacechildren') | strcmp(origNextPlot,'replace'),
set(gcf,'NextPlot','add')
end
if loc(1)=='v', % Append vertical scale to right of current plot
if isempty(ax),
units = get(h,'units'); set(h,'units','normalized')
pos = get(h,'Position');
[az,el] = view;
stripe = 0.040; edge = 0.02;
if all([az,el]==[0 90]), space = 0.02; else space = .1; end
set(h,'Position',[pos(1) pos(2) pos(3)*(1-stripe-edge-space) pos(4)])
rect = [pos(1)+(1-stripe-edge)*pos(3) pos(2) stripe*pos(3) pos(4)];
ud.origPos = pos;
% Create axes for stripe and
% create DeleteProxy object (an invisible text object in
% the target axes) so that the colorbar will be deleted
% properly.
ud.DeleteProxy = text('parent',h,'visible','off',...
'tag','ColorbarDeleteProxy',...
'handlevisibility','off',...
'deletefcn','eval(''delete(get(gcbo,''''userdata''''))'','''')');
ax = axes('Position', rect);
set(ud.DeleteProxy,'userdata',ax)
set(h,'units',units)
else
axes(ax);
ud = get(ax,'userdata');
end
% Create color stripe
n = size(colormap,1);
image([0 1],t,(1:n)','Tag','TMW_COLORBAR','deletefcn','colorbar(''delete'')'); set(ax,'Ydir','normal')
set(ax,'YAxisLocation','right')
set(ax,'xtick',[])
% set up axes deletefcn
set(ax,'tag','Colorbar','deletefcn','colorbar(''delete'')')
elseif loc(1)=='h', % Append horizontal scale to top of current plot
if isempty(ax),
units = get(h,'units'); set(h,'units','normalized')
pos = get(h,'Position');
stripe = 0.05; space = 0.1;
set(h,'Position',...
[pos(1) pos(2)+(stripe+space)*pos(4) pos(3) (1-stripe-space)*pos(4)])
rect = [pos(1) pos(2) pos(3) stripe*pos(4)];
ud.origPos = pos;
% Create axes for stripe and
% create DeleteProxy object (an invisible text object in
% the target axes) so that the colorbar will be deleted
% properly.
ud.DeleteProxy = text('parent',h,'visible','off',...
'tag','ColorbarDeleteProxy',...
'handlevisibility','off',...
'deletefcn','eval(''delete(get(gcbo,''''userdata''''))'','''')');
ax = axes('Position', rect);
set(ud.DeleteProxy,'userdata',ax)
set(h,'units',units)
else
axes(ax);
ud = get(ax,'userdata');
end
% Create color stripe
n = size(colormap,1);
image(t,[0 1],(1:n),'Tag','TMW_COLORBAR','deletefcn','colorbar(''delete'')'); set(ax,'Ydir','normal')
set(ax,'ytick',[])
% set up axes deletefcn
set(ax,'tag','Colorbar','deletefcn','colorbar(''delete'')')
else
error('COLORBAR expects a handle, ''vert'', or ''horiz'' as input.')
end
if ~isfield(ud,'DeleteProxy'), ud.DeleteProxy = []; end
if ~isfield(ud,'origPos'), ud.origPos = []; end
ud.PlotHandle = h;
set(ax,'userdata',ud)
set(gcf,'CurrentAxes',h)
set(gcf,'NextPlot',origNextPlot)
if nargout>0, handle = ax; end