annotate scripts/sparse/treeplot.m @ 20164:df437a52bcaf stable

doc: Update more docstrings to have one sentence summary as first line. Reviewed miscellaneous, sparse, strings in scripts directory. * scripts/miscellaneous/bzip2.m, scripts/miscellaneous/citation.m, scripts/miscellaneous/compare_versions.m, scripts/miscellaneous/computer.m, scripts/miscellaneous/debug.m, scripts/miscellaneous/dir.m, scripts/miscellaneous/edit.m, scripts/miscellaneous/error_ids.m, scripts/miscellaneous/fileattrib.m, scripts/miscellaneous/fullfile.m, scripts/miscellaneous/genvarname.m, scripts/miscellaneous/gzip.m, scripts/miscellaneous/mkoctfile.m, scripts/miscellaneous/news.m, scripts/miscellaneous/open.m, scripts/miscellaneous/parseparams.m, scripts/miscellaneous/recycle.m, scripts/miscellaneous/run.m, scripts/miscellaneous/swapbytes.m, scripts/miscellaneous/tar.m, scripts/miscellaneous/tmpnam.m, scripts/miscellaneous/unpack.m, scripts/miscellaneous/what.m, scripts/sparse/bicg.m, scripts/sparse/bicgstab.m, scripts/sparse/cgs.m, scripts/sparse/colperm.m, scripts/sparse/eigs.m, scripts/sparse/etreeplot.m, scripts/sparse/gmres.m, scripts/sparse/gplot.m, scripts/sparse/ichol.m, scripts/sparse/ilu.m, scripts/sparse/pcg.m, scripts/sparse/pcr.m, scripts/sparse/qmr.m, scripts/sparse/spaugment.m, scripts/sparse/spconvert.m, scripts/sparse/spdiags.m, scripts/sparse/spfun.m, scripts/sparse/spones.m, scripts/sparse/sprandsym.m, scripts/sparse/spstats.m, scripts/sparse/spy.m, scripts/sparse/svds.m, scripts/sparse/treelayout.m, scripts/sparse/treeplot.m, scripts/strings/base2dec.m, scripts/strings/bin2dec.m, scripts/strings/blanks.m, scripts/strings/cstrcat.m, scripts/strings/deblank.m, scripts/strings/dec2base.m, scripts/strings/dec2bin.m, scripts/strings/dec2hex.m, scripts/strings/findstr.m, scripts/strings/hex2dec.m, scripts/strings/index.m, scripts/strings/isletter.m, scripts/strings/isstrprop.m, scripts/strings/mat2str.m, scripts/strings/ostrsplit.m, scripts/strings/regexptranslate.m, scripts/strings/rindex.m, scripts/strings/str2num.m, scripts/strings/strcat.m, scripts/strings/strchr.m, scripts/strings/strjoin.m, scripts/strings/strjust.m, scripts/strings/strmatch.m, scripts/strings/strsplit.m, scripts/strings/strtok.m, scripts/strings/strtrim.m, scripts/strings/strtrunc.m, scripts/strings/substr.m, scripts/strings/untabify.m, scripts/time/datenum.m: Update more docstrings to have one sentence summary as first line.
author Rik <rik@octave.org>
date Mon, 04 May 2015 14:22:02 -0700
parents 4197fc428c7d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19697
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 18857
diff changeset
1 ## Copyright (C) 2005-2015 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})
20164
df437a52bcaf doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
22 ## Produce a graph of tree or forest.
df437a52bcaf doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
23 ##
df437a52bcaf doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
24 ## The first argument is vector of predecessors.
df437a52bcaf doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
25 ##
df437a52bcaf doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
26 ## The optional parameters @var{node_style} and @var{edge_style} define the
df437a52bcaf doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
27 ## output plot style.
df437a52bcaf doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
28 ##
df437a52bcaf doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
29 ## The complexity of the algorithm is O(n) in terms of is time and memory
df437a52bcaf doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
30 ## requirements.
5642
2618a0750ae6 [project @ 2006-03-06 21:26:48 by jwe]
jwe
parents: 5578
diff changeset
31 ## @seealso{etreeplot, gplot}
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
32 ## @end deftypefn
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
33
12487
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
34 function treeplot (tree, node_style = "ko", edge_style = "r")
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
35
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
36 if (nargin < 1 || nargin > 3 || nargout > 0)
6498
2c85044aa63f [project @ 2007-04-05 17:59:47 by jwe]
jwe
parents: 6339
diff changeset
37 print_usage ();
12487
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 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
41 || ! 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
42 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
43 endif
6498
2c85044aa63f [project @ 2007-04-05 17:59:47 by jwe]
jwe
parents: 6339
diff changeset
44
12487
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
45 ## Verify node_style
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
46 if (nargin > 1)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
47 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
48 node_style = [node_style, "o"];
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
49 endif
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
50 endif
12487
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
51
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
52 ## 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
53 tree = tree(:)';
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
54
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
55 ## 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
56 num_nodes = length (tree);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
57
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
58 ## The number of children.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
59 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
60
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
61 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
62 ## 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
63 ## choose of descendant nodes.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
64
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
65 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
66 endfor
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
67 pos = 1;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
68 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
69 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
70 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
71 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
72 start(i) = pos;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
73 xhelp(i) = pos;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
74 pos += num_children(i);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
75 stop(i) = pos;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
76 endfor
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
77 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
78 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
79 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
80 endfor
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
81
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
82 ## 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
83 ## 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
84 par_number = 0;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
85
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
86 ## 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
87 ## 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
88 left_most = 0;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
89
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
90 ## 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
91 level = num_nodes;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
92
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
93 ## 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
94 max_ht = num_nodes;
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 ## 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
97 ## 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
98 ## there is "parent node".
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
99 stk = [-1, 0];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
100
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
101 ## 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
102 ## uninterupted line).
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
103 skelet = 0;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
104
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
105 ## 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
106 while (par_number != -1)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
107 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
108 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
109 else
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
110 idx = zeros (1, 0);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
111 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
112 ## 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
113 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
114 ## 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
115 if (par_number != 0)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
116 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
117 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
118
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
119 ## 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
120 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
121 left_most++;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
122 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
123 max_ht = min (max_ht, level);
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14237
diff changeset
124 if (length (stk) > 1 && find ((shift (stk,1) - stk) == 0) > 1
12487
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
125 && 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
126 ## 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
127 ## 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
128 ## 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
129 ## same parent node).
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14237
diff changeset
130 position = (find ((shift (stk(:,2),1) - stk(:,2)) == 0))(end) + 1;
12487
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
131 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
132 ## 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
133 ## position to end).
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
134 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
135 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
136 ## 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
137 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
138 stk(position:end,:) = [];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
139 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
140 ## 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
141 stk(end,:) = [];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
142 ## Choose new "parent node".
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
143 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
144 ## 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
145 if (par_number != -1)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
146 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
147 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
148 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
149 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
150 else
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
151 ## 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
152 ## 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
153 level--;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
154 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
155 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
156 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
157 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
158 endwhile
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
159
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
160 ## 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
161 ## 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
162 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
163
18857
7bbe3658c5ef maint: Use "FIXME:" coding convention in m-files.
Rik <rik@octave.org>
parents: 17744
diff changeset
164 ## FIXME: We should probably stuff all the arguments into a cell
7bbe3658c5ef maint: Use "FIXME:" coding convention in m-files.
Rik <rik@octave.org>
parents: 17744
diff changeset
165 ## array and make a single call to plot here so we can avoid
7bbe3658c5ef maint: Use "FIXME:" coding convention in m-files.
Rik <rik@octave.org>
parents: 17744
diff changeset
166 ## setting the hold state...
12487
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 hold_is_on = ishold ();
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
169 unwind_protect
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
170 ## Plot graph nodes.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
171 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
172
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
173 ## 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
174 skelet = [skelet; 0];
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
175
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
176 ## Draw graph edges.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
177 idx = find (skelet == 0);
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
178
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
179 hold ("on");
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
180 ## Plot each tree component in one loop.
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14237
diff changeset
181 for i = 2:length (idx)
12487
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
182 ## Tree component start.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
183 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
184 ## Tree component end.
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
185 istop = idx(i) - 1;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
186 if (istop - istart < 1)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
187 continue;
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
188 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
189 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
190 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
191 endfor
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
192
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
193 ## 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
194 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
195
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
196 unwind_protect_cleanup
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
197 if (! hold_is_on)
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
198 hold ("off");
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
199 endif
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
200 end_unwind_protect
bac54daffde2 treeplot.m: Use 'o' plot style as default for nodes
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
201
5576
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
202 endfunction
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
203
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
204
7e008607a86e [project @ 2005-12-13 19:05:54 by jwe]
jwe
parents:
diff changeset
205 %!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
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]);
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
208 %! % 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
209
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
210 %!demo
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
211 %! clf;
11949c9795a0 Revamp %!demos in m-files to use Octave coding conventions on spacing, etc.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
212 %! 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
213 %! % 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
214