annotate scripts/sparse/treeplot.m @ 14237:11949c9795a0

Revamp %!demos in m-files to use Octave coding conventions on spacing, etc. Add clf() to all demos using plot features to get reproducibility. Use 64 as input to all colormaps (jet (64)) to get reproducibility. * bicubic.m, cell2mat.m, celldisp.m, cplxpair.m, interp1.m, interp2.m, interpft.m, interpn.m, profile.m, profshow.m, convhull.m, delaunay.m, griddata.m, inpolygon.m, voronoi.m, autumn.m, bone.m, contrast.m, cool.m, copper.m, flag.m, gmap40.m, gray.m, hot.m, hsv.m, image.m, imshow.m, jet.m, ocean.m, pink.m, prism.m, rainbow.m, spring.m, summer.m, white.m, winter.m, condest.m, onenormest.m, axis.m, clabel.m, colorbar.m, comet.m, comet3.m, compass.m, contour.m, contour3.m, contourf.m, cylinder.m, daspect.m, ellipsoid.m, errorbar.m, ezcontour.m, ezcontourf.m, ezmesh.m, ezmeshc.m, ezplot.m, ezplot3.m, ezpolar.m, ezsurf.m, ezsurfc.m, feather.m, fill.m, fplot.m, grid.m, hold.m, isosurface.m, legend.m, loglog.m, loglogerr.m, pareto.m, patch.m, pbaspect.m, pcolor.m, pie.m, pie3.m, plot3.m, plotmatrix.m, plotyy.m, polar.m, quiver.m, quiver3.m, rectangle.m, refreshdata.m, ribbon.m, rose.m, scatter.m, scatter3.m, semilogx.m, semilogxerr.m, semilogy.m, semilogyerr.m, shading.m, slice.m, sombrero.m, stairs.m, stem.m, stem3.m, subplot.m, surf.m, surfc.m, surfl.m, surfnorm.m, text.m, title.m, trimesh.m, triplot.m, trisurf.m, uigetdir.m, uigetfile.m, uimenu.m, uiputfile.m, waitbar.m, xlim.m, ylim.m, zlim.m, mkpp.m, pchip.m, polyaffine.m, spline.m, bicgstab.m, cgs.m, gplot.m, pcg.m, pcr.m, treeplot.m, strtok.m, demo.m, example.m, rundemos.m, speed.m, test.m, calendar.m, datestr.m, datetick.m, weekday.m: Revamp %!demos to use Octave coding conventions on spacing, etc.
author Rik <octave@nomad.inbox5.com>
date Fri, 20 Jan 2012 12:59:53 -0800
parents 72c96de7a403
children 5d3a684236b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14138
72c96de7a403 maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents: 12575
diff changeset
1 ## Copyright (C) 2005-2012 Ivana Varekova
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
2 ##
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
3 ## This file is part of Octave.
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
4 ##
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
6 ## under the terms of the GNU General Public License as published by
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
8 ## your option) any later version.
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
9 ##
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
13 ## General Public License for more details.
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
14 ##
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7007
diff changeset
17 ## <http://www.gnu.org/licenses/>.
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
18
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
19 ## -*- texinfo -*-
10793
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
20 ## @deftypefn {Function File} {} treeplot (@var{tree})
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 10793
diff changeset
21 ## @deftypefnx {Function File} {} treeplot (@var{tree}, @var{node_style}, @var{edge_style})
12575
d0b799dafede Grammarcheck files for 3.4.1 release.
Rik <octave@nomad.inbox5.com>
parents: 12487
diff changeset
22 ## Produce a graph of tree or forest. The first argument is vector of
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 10793
diff changeset
23 ## predecessors, optional parameters @var{node_style} and @var{edge_style}
9051
1bf0ce0930be Grammar check TexInfo in all .m files
Rik <rdrider0-list@yahoo.com>
parents: 8920
diff changeset
24 ## define the output style. The complexity of the algorithm is O(n) in
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
25 ## terms of is time and memory requirements.
5642
2618a0750ae6 [project @ 2006-03-06 21:26:48 by jwe]
jwe
parents: 5578
diff changeset
26 ## @seealso{etreeplot, gplot}
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
27 ## @end deftypefn
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
28
12487
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
29 function treeplot (tree, node_style = "ko", edge_style = "r")
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
30
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
31 if (nargin < 1 || nargin > 3 || nargout > 0)
6498
2c85044aa63f [project @ 2007-04-05 17:59:47 by jwe]
jwe
parents: 6339
diff changeset
32 print_usage ();
12487
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
33 endif
6498
2c85044aa63f [project @ 2007-04-05 17:59:47 by jwe]
jwe
parents: 6339
diff changeset
34
12487
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
35 if (! ismatrix (tree) || rows (tree) != 1 || ! isnumeric (tree)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
36 || ! isvector (tree) || any (tree > length (tree)))
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
37 error ("treeplot: TREE must be a vector of predecessors");
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
38 endif
6498
2c85044aa63f [project @ 2007-04-05 17:59:47 by jwe]
jwe
parents: 6339
diff changeset
39
12487
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
40 ## Verify node_style
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
41 if (nargin > 1)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
42 if (isempty (regexp (node_style, '[ox+*]', 'once')))
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
43 node_style = [node_style, "o"];
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
44 endif
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
45 endif
12487
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
46
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
47 ## Make it a row vector.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
48 tree = tree(:)';
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
49
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
50 ## The count of nodes of the graph.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
51 num_nodes = length (tree);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
52
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
53 ## The number of children.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
54 num_children = zeros (1, num_nodes+1);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
55
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
56 for i = 1:num_nodes
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
57 ## VEC_OF_CHILD is helping vector which is used to speed up the
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
58 ## choose of descendant nodes.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
59
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
60 num_children(tree(i)+1) = num_children(tree(i)+1) + 1;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
61 endfor
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
62 pos = 1;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
63 start = zeros (1, num_nodes+1);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
64 xhelp = zeros (1, num_nodes+1);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
65 stop = zeros (1, num_nodes+1);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
66 for i = 1:num_nodes+1
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
67 start(i) = pos;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
68 xhelp(i) = pos;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
69 pos += num_children(i);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
70 stop(i) = pos;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
71 endfor
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
72 for i = 1:num_nodes
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
73 vec_of_child(xhelp(tree(i)+1)) = i;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
74 xhelp(tree(i)+1) = xhelp(tree(i)+1)+1;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
75 endfor
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
76
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
77 ## The number of "parent" (actual) node (it's descendants will be
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
78 ## browse in the next iteration).
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
79 par_number = 0;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
80
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
81 ## The x-coordinate of the left most descendant of "parent node"
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
82 ## this value is increased in each leaf.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
83 left_most = 0;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
84
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
85 ## The level of "parent" node (root level is num_nodes).
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
86 level = num_nodes;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
87
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
88 ## Num_nodes - max_ht is the height of this graph.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
89 max_ht = num_nodes;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
90
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
91 ## Main stack - each item consists of two numbers - the number of
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
92 ## node and the number it's of parent node on the top of stack
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
93 ## there is "parent node".
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
94 stk = [-1, 0];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
95
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
96 ## Stack which is use to draw the graph edge (it have to be
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
97 ## uninterupted line).
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
98 skelet = 0;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
99
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
100 ## The top of the stack.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
101 while (par_number != -1)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
102 if (start(par_number+1) < stop(par_number+1))
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
103 idx = vec_of_child(start(par_number+1):stop(par_number+1)-1);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
104 else
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
105 idx = zeros (1, 0);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
106 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
107 ## Add to idx the vector of parent descendants.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
108 stk = [stk; [idx', ones(fliplr(size(idx)))*par_number]];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
109 ## Add to stack the records relevant to parent descandant s.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
110 if (par_number != 0)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
111 skelet = [skelet; ([ones(size(idx))*par_number; idx])(:)];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
112 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
113
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
114 ## If there is not any descendant of "parent node":
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
115 if (stk(end,2) != par_number)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
116 left_most++;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
117 x_coordinate_r(par_number) = left_most;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
118 max_ht = min (max_ht, level);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
119 if (length(stk) > 1 && find ((shift(stk,1)-stk) == 0) > 1
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
120 && stk(end,2) != stk(end-1,2))
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
121 ## Return to the nearest branching the position to return
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
122 ## position is the position on the stack, where should be
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
123 ## started further search (there are two nodes which has the
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
124 ## same parent node).
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
125 position = (find ((shift(stk(:,2),1)-stk(:,2)) == 0))(end) + 1;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
126 par_number_vec = stk(position:end,2);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
127 ## The vector of removed nodes (the content of stack form
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
128 ## position to end).
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
129 skelet = [skelet; flipud(par_number_vec)];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
130 level += length (par_number_vec);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
131 ## The level have to be decreased.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
132 x_coordinate_r(par_number_vec) = left_most;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
133 stk(position:end,:) = [];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
134 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
135 ## Remove the next node from "searched branch".
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
136 stk(end,:) = [];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
137 ## Choose new "parent node".
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
138 par_number = stk(end,1);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
139 ## If there is another branch start to search it.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
140 if (par_number != -1)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
141 skelet = [skelet; stk(end,2); par_number];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
142 y_coordinate(par_number) = level;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
143 x_coordinate_l(par_number) = left_most + 1;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
144 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
145 else
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
146 ## There were descendants of "parent nod" choose the last of
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
147 ## them and go on through it.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
148 level--;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
149 par_number = stk(end,1);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
150 y_coordinate(par_number) = level;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
151 x_coordinate_l(par_number) = left_most + 1;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
152 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
153 endwhile
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
154
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
155 ## Calculate the x coordinates (the known values are the position
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
156 ## of most left and most right descendants).
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
157 x_coordinate = (x_coordinate_l + x_coordinate_r) / 2;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
158
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
159 ## FIXME -- we should probably stuff all the arguments into a cell
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
160 ## array and make a single call to plot here so we can avoid
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
161 ## setting the hold state...
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
162
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
163 hold_is_on = ishold ();
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
164 unwind_protect
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
165 ## Plot graph nodes.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
166 plot (x_coordinate, y_coordinate, node_style);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
167
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
168 ## Helping command - usable for plotting edges
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
169 skelet = [skelet; 0];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
170
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
171 ## Draw graph edges.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
172 idx = find (skelet == 0);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
173
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
174 hold ("on");
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
175 ## Plot each tree component in one loop.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
176 for i = 2:length(idx)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
177 ## Tree component start.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
178 istart = idx(i-1) + 1;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
179 ## Tree component end.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
180 istop = idx(i) - 1;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
181 if (istop - istart < 1)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
182 continue;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
183 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
184 plot (x_coordinate(skelet(istart:istop)),
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
185 y_coordinate(skelet(istart:istop)), edge_style);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
186 endfor
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
187
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
188 ## Set axis and graph size.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
189 axis ([0.5, left_most+0.5, max_ht-0.5, num_nodes-0.5], "nolabel");
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
190
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
191 unwind_protect_cleanup
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
192 if (! hold_is_on)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
193 hold ("off");
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
194 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
195 end_unwind_protect
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
196
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
197 endfunction
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
198
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
199
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
200 %!demo
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
201 %! clf;
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
202 %! treeplot ([2 4 2 0 6 4 6]);
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
203 %! % Plot a simple tree plot
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
204
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
205 %!demo
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
206 %! clf;
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
207 %! treeplot ([2 4 2 0 6 4 6], "b+", "g");
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
208 %! % Plot a simple tree plot defining the edge and node styles
14237
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
209