0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 function varargout = plot(varargin)
0026
0027
0028
0029 if utils.helper.isinfocall(varargin{:})
0030 varargout{1} = getInfo(varargin{3});
0031 return
0032 end
0033
0034 import utils.const.*
0035 utils.helper.msg(msg.OMNAME, 'running %s/%s', mfilename('class'), mfilename);
0036
0037
0038 if isa(varargin{1}, 'history')
0039
0040 figure;
0041 hists = varargin{1};
0042 curr_axes = axes;
0043 if nargin >= 2
0044 varargin = varargin(2:end);
0045 else
0046 varargin = {};
0047 end
0048
0049
0050 elseif ishandle(varargin{1})
0051
0052 curr_axes = varargin{1};
0053 axes(curr_axes);
0054 hists = varargin{2};
0055 if nargin >= 3
0056 varargin = varargin(3:end);
0057 else
0058 varargin = {};
0059 end
0060
0061 else
0062 error (['### the first input should be a history object or an axes handle' ...
0063 sprintf(' varargin{1} = [%s]',varargin{1})]);
0064 end
0065
0066
0067 plot_args = {};
0068 pl = plist();
0069 args = varargin;
0070
0071 while ~isempty(args)
0072
0073 if isa(args{1}, 'plist')
0074 arg = args{1};
0075 pl = append(pl, arg);
0076 args = args(2:end);
0077
0078
0079 elseif length(args) >= 2
0080 if ischar(args{1})
0081 arg = args{1};
0082 val = args{2};
0083 pl = append(pl, param(arg, val));
0084
0085 plot_args{end+1} = arg;
0086 plot_args{end+1} = val;
0087 args = args(3:end);
0088
0089 else
0090 error('### the key [%s] is not from the type ''char''', char(args{1}));
0091 end
0092 else
0093 help(mfilename('fullpath'))
0094 error('### There is no key/value pair left.');
0095 end
0096
0097 end
0098
0099
0100 max_depth = find(pl, 'max_depth');
0101
0102
0103 hfig = [];
0104 ax = [];
0105 at = [];
0106
0107 nhists = length(hists);
0108 for i=1:nhists
0109
0110 hist = hists(i);
0111
0112
0113
0114 if ~isempty(max_depth)
0115 [n,a, nodes] = getNodes_plot(hist, [], 0, 1, [], 0, max_depth);
0116 else
0117 [n,a, nodes] = getNodes(hist, [], 0, 1, []);
0118 end
0119 p = [nodes(:).pn];
0120 [x,y,h]=treelayout(p);
0121 f = find(p~=0);
0122 pp = p(f);
0123 X = [x(f); x(pp); repmat(NaN,size(f))];
0124 Y = [y(f); y(pp); repmat(NaN,size(f))];
0125 X = X(:);
0126 Y = Y(:);
0127
0128
0129 hfig = [hfig gcf];
0130
0131
0132 a = plot (curr_axes, X, Y, 'r--', x, y, 'ro');
0133
0134 if length(a)>1
0135 set(a(2), 'MarkerFaceColor', 'r');
0136 set(a(2), 'MarkerSize', 8);
0137 end
0138 args = plot_args;
0139 while ~isempty(args)
0140 prop = args{1};
0141 val = args{2};
0142 args = args(3:end);
0143 for ii = 1:length(a)
0144 set(a(ii), prop, val);
0145 end
0146 end
0147 ax = [ax a];
0148
0149
0150 a = [];
0151 for j=1:length(x)
0152
0153 fcnname = getFcnName(nodes(j).names);
0154 str = ['{\bf\color{blue}' num2str(nodes(j).n) ':}{\bf\color{red}' fcnname '} ' char(nodes(j).params)];
0155 nlstr = getNodeInputs(nodes(j).invars);
0156
0157 na = text(x(j), y(j),...
0158 [utils.prog.wrapstring(strrep(str,'_', '\_'),getappdata(0, 'wrapstringat')) ...
0159 cellstr(['{\color{magenta} ' strrep(nlstr,'_', '\_') '}'])]);
0160 set(na, 'HorizontalAlignment', 'center');
0161 set(na, 'EdgeColor', 'k', 'Fontsize', 10);
0162 set(na, 'BackgroundColor', 'w');
0163 set(na, 'Margin', 5);
0164 a = [a na];
0165 end
0166 at = [at a];
0167
0168
0169 axis([0 1 0 1]);
0170 box off;
0171 axis off;
0172
0173 end
0174
0175
0176 if nargout > 0
0177 varargout{1} = hfig;
0178 end
0179 if nargout > 1
0180 varargout{2} = ax;
0181 end
0182 if nargout > 2
0183 varargout{3} = at;
0184 end
0185 end
0186
0187
0188
0189
0190
0191
0192
0193 function fcnname = getFcnName(name)
0194
0195 switch name
0196 case 'mtimes'
0197 fcnname = '\times';
0198 case 'times'
0199 fcnname = '\times';
0200 case 'plus'
0201 fcnname = '+';
0202 case 'minus'
0203 fcnname = '-';
0204 case 'sqrt'
0205 fcnname = '\surd';
0206 case 'mrdivide'
0207 fcnname = '/';
0208 case 'rdivide'
0209 fcnname = '/';
0210 otherwise
0211 fcnname = char(name);
0212 end
0213 end
0214
0215
0216
0217 function str = getNodeInputs(invars)
0218
0219 ni = length(invars);
0220 if ni > 0
0221 str = char(invars{1});
0222 for iv=2:ni
0223 s = char(invars{iv});
0224 if ~strcmp(s, 'pl')
0225 str = [str ' ' s];
0226 end
0227 end
0228 else
0229 str = '';
0230 end
0231 end
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244 function ii = getInfo(varargin)
0245 if nargin == 1 && strcmpi(varargin{1}, 'None')
0246 sets = {};
0247 pl = [];
0248 else
0249 sets = {'Default'};
0250 pl = getDefaultPlist;
0251 end
0252
0253 ii = minfo(mfilename, 'history', '', 'Output', '$Id: plot.m,v 1.25 2008/08/08 14:52:24 hewitson Exp $', sets, pl);
0254 end
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267 function plo = getDefaultPlist()
0268 plo = plist();
0269 end
0270