annotate scripts/sparse/treeplot.m @ 20170:af2b7695f1c4 draft default tip @

gallery.m: clean and vectorize part of qmult. * scripts/special-matrix/gallery.m: make qmult() follow Octave guidelines, vectorize last for loop in qmult().
author Antonio Pino Robles <data.script93@gmail.com>
date Thu, 28 May 2015 18:32:47 +0200
parents 4197fc428c7d
children df437a52bcaf
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})
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);
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14237
diff changeset
119 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
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).
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14237
diff changeset
125 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
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
18857
7bbe3658c5ef maint: Use "FIXME:" coding convention in m-files.
Rik <rik@octave.org>
parents: 17744
diff changeset
159 ## 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
160 ## 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
161 ## 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
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.
14868
5d3a684236b0 maint: Use Octave coding conventions for cuddling parentheses in scripts directory
Rik <octave@nomad.inbox5.com>
parents: 14237
diff changeset
176 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
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