123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- %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 <p.th>
- % 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>/<value>
- 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
- %-------------------------------------------------------------------------------
|