Mercurial > hg > ltpda
view m-toolbox/classes/@history/plot.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line source
% PLOT plots a history object as a tree diagram. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % DESCRIPTION: PLOT plots a history object as a tree diagram. % % NOTE: Some of the code below is taken from Mathworks's treeplot.m % % CALL: plot (history) % plot (history, arg) % plot (history, arg, pl) % plot (axes_handle, ...) % % PARAMETER: 'stop_option' - 'File' ignores the history steps below load-history step % - 'Repo' ignores the history steps below retrieve-history step % - 'File Repo' both steps above % - N maximun depth % % VERSION: $Id: plot.m,v 1.34 2011/02/18 16:48:52 ingo Exp $ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function varargout = plot(varargin) import utils.const.* prefs = getappdata(0, 'LTPDApreferences'); utils.helper.msg(msg.OMNAME, 'running %s/%s', mfilename('class'), mfilename); %%% Used call: plot (history, arg) if isa(varargin{1}, 'history') figure; hists = varargin{1}; curr_axes = axes; if nargin >= 2 varargin = varargin(2:end); else varargin = {}; end %%% Used call: plot (curr_axes_handle, history, arg) elseif ishandle(varargin{1}) curr_axes = varargin{1}; axes(curr_axes); hists = varargin{2}; if nargin >= 3 varargin = varargin(3:end); else varargin = {}; end else error (['### the first input should be a history object or an axes handle' ... sprintf(' varargin{1} = [%s]',varargin{1})]); end %%% collect the parameter and put them into the parameter list plot_args = {}; pl = plist(); args = varargin; while ~isempty(args) if isa(args{1}, 'plist') arg = args{1}; pl = append(pl, arg); args = args(2:end); % Add the key-values to the parameter list elseif length(args) >= 2 if ischar(args{1}) arg = args{1}; val = args{2}; pl = append(pl, param(arg, val)); plot_args{end+1} = arg; plot_args{end+1} = val; args = args(3:end); else error('### the key [%s] is not from the type ''char''', char(args{1})); end else help(mfilename('fullpath')) error('### There is no key/value pair left.'); end end %%% Combine input plist and default plist pl = combine(pl, getDefaultPlist); %%% Comes the call from the browser or from the command window stop_option = find(pl, 'stop_option'); %%% Output handles for figures and axes hfig = []; ax = []; at = []; nhists = length(hists); for i=1:nhists hist = hists(i); % disp(sprintf('--- plotting history %s', hist.name)); % convert history object to a node list [n,a, nodes] = getNodes(hist, stop_option); p = [nodes(:).pn]; [x,y,h]=treelayout(p); f = find(p~=0); pp = p(f); X = [x(f); x(pp); repmat(NaN,size(f))]; Y = [y(f); y(pp); repmat(NaN,size(f))]; X = X(:); Y = Y(:); % figure hfig = [hfig gcf]; % axes objects a = plot (curr_axes, X, Y, 'r--', x, y, 'ro'); % plot (X,Y) --> die linien if length(a)>1 set(a(2), 'MarkerFaceColor', 'r'); set(a(2), 'MarkerSize', 8); end args = plot_args; while ~isempty(args) prop = args{1}; val = args{2}; args = args(3:end); for ii = 1:length(a) set(a(ii), prop, val); end end ax = [ax a]; % text objects a = []; for j=1:length(x) % node description fcnname = getFcnName(nodes(j).names); str = ['{\bf\color{blue}' num2str(nodes(j).n) ':}{\bf\color{red}' fcnname '} ' strrep(strrep(char(nodes(j).params), '{', '\{'), '}', '\}')]; nlstr = getNodeInputs(nodes(j).invars); na = text(x(j), y(j),... [utils.prog.wrapstring(strrep(str,'_', '\_'), double(prefs.getDisplayPrefs.getDisplayWrapStrings)) ... cellstr(['{\color{magenta} ' strrep(nlstr,'_', '\_') '}'])]); set(na, 'HorizontalAlignment', 'center'); set(na, 'EdgeColor', 'k', 'Fontsize', 10); set(na, 'BackgroundColor', 'w'); set(na, 'Margin', 5); a = [a na]; end at = [at a]; % xlabel(['height = ' int2str(h)]); axis([0 1 0 1]); box off; axis off; end % Make outputs if nargout > 0 varargout{1} = hfig; end if nargout > 1 varargout{2} = ax; end if nargout > 2 varargout{3} = at; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Local Functions % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % FUNCTION: getFcnName % % DESCRIPTION: compute strings to display for function name. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function fcnname = getFcnName(name) % switch name % case 'mtimes' % fcnname = 'x'; % case 'times' % fcnname = 'x'; % case 'plus' % fcnname = '+'; % case 'minus' % fcnname = '-'; % % case 'sqrt' % % fcnname = '\surd'; % case 'mrdivide' % fcnname = '/'; % case 'rdivide' % fcnname = '/'; % otherwise % fcnname = char(name); % end fcnname = char(name); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % FUNCTION: getNodeInputs % % DESCRIPTION: compute strings to display for inputs to nodes. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function str = getNodeInputs(invars) ni = length(invars); if ni > 0 str = char(invars{1}); for iv=2:ni s = char(invars{iv}); if ~strcmp(s, 'pl') str = [str ' ' s]; end end else str = ''; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % FUNCTION: getDefaultPlist % % DESCRIPTION: Returns the default parameter list. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function plo = getDefaultPlist() plo = plist('stop_option', 'full'); end