%MTIT creates a major title in a figure with many axes % % MTIT % - creates a major title above all % axes in a figure % - preserves the stack order of % the axis handles % %SYNTAX %------------------------------------------------------------------------------- % P = MTIT(TXT,[OPT1,...,OPTn]) % P = MTIT(FH,TXT,[OPT1,...,OPTn]) % %INPUT %------------------------------------------------------------------------------- % FH : a valid figure handle [def: gcf] % TXT : title string % % OPT : argument % ------------------------------------------- % xoff : +/- displacement along X axis % yoff : +/- displacement along Y axis % zoff : +/- displacement along Z axis % % title modifier pair(s) % ------------------------------------------- % TPx : TVx % see: get(text) for possible % parameters/values % %OUTPUT %------------------------------------------------------------------------------- % par : parameter structure % .pos : position of surrounding axis % .oh : handle of last used axis % .ah : handle of invisible surrounding axis % .th : handle of main title % %EXAMPLE %------------------------------------------------------------------------------- % subplot(2,3,[1 3]); title('PLOT 1'); % subplot(2,3,4); title('PLOT 2'); % subplot(2,3,5); title('PLOT 3'); % axes('units','inches',... % 'color',[0 1 .5],... % 'position',[.5 .5 2 2]); title('PLOT 41'); % axes('units','inches',... % 'color',[0 .5 1],... % 'position',[3.5 .5 2 2]); title('PLOT 42'); % shg; % p=mtit('the BIG title',... % 'fontsize',14,'color',[1 0 0],... % 'xoff',-.1,'yoff',.025); % % refine title using its handle % set(p.th,'edgecolor',.5*[1 1 1]); % created: % us 24-Feb-2003 / R13 % modified: % us 24-Feb-2003 / CSSM % us 06-Apr-2003 / TMW % us 13-Nov-2009 17:38:17 %------------------------------------------------------------------------------- function par=mtit(varargin) defunit='normalized'; if nargout par=[]; end % check input if nargin < 1 help(mfilename); return; end if isempty(get(0,'currentfigure')) disp('MTIT> no figure'); return; end vl=true(size(varargin)); if ischar(varargin{1}) vl(1)=false; figh=gcf; txt=varargin{1}; elseif any(ishandle(varargin{1}(:))) &&... ischar(varargin{2}) vl(1:2)=false; figh=varargin{1}; txt=varargin{2}; else error('MTIT> invalid input'); end vin=varargin(vl); [off,vout]=get_off(vin{:}); % find surrounding box ah=findall(figh,'type','axes'); if isempty(ah) disp('MTIT> no axis'); return; end oah=ah(1); ou=get(ah,'units'); set(ah,'units',defunit); ap=get(ah,'position'); if iscell(ap) ap=cell2mat(get(ah,'position')); end ap=[ min(ap(:,1)),max(ap(:,1)+ap(:,3)),... min(ap(:,2)),max(ap(:,2)+ap(:,4))]; ap=[ ap(1),ap(3),... ap(2)-ap(1),ap(4)-ap(3)]; % create axis... xh=axes('position',ap); % ...and title th=title(txt,vout{:}); tp=get(th,'position'); set(th,'position',tp+off); set(xh,'visible','off','hittest','on'); set(th,'visible','on'); % reset original units ix=find(~strcmpi(ou,defunit)); if ~isempty(ix) for i=ix(:).' set(ah(i),'units',ou{i}); end end % ...and axis' order uistack(xh,'bottom'); axes(oah); %#ok if nargout par.pos=ap; par.oh=oah; par.ah=xh; par.th=th; end end %------------------------------------------------------------------------------- function [off,vout]=get_off(varargin) % search for pairs <.off>/ off=zeros(1,3); io=0; for mode={'xoff','yoff','zoff'}; ix=strcmpi(varargin,mode); if any(ix) io=io+1; yx=find(ix); ix(yx+1)=1; off(1,io)=varargin{yx(end)+1}; varargin=varargin(xor(ix,1)); end end vout=varargin; end %-------------------------------------------------------------------------------