Mercurial > hg > octave-lyh
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 |
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 | 2 ## |
7016 | 3 ## This file is part of Octave. |
5576 | 4 ## |
7016 | 5 ## Octave is free software; you can redistribute it and/or modify it |
6 ## under the terms of the GNU General Public License as published by | |
7 ## the Free Software Foundation; either version 3 of the License, or (at | |
8 ## your option) any later version. | |
9 ## | |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
5576 | 14 ## |
15 ## You should have received a copy of the GNU General Public License | |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
5576 | 18 |
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 | 25 ## terms of is time and memory requirements. |
5642 | 26 ## @seealso{etreeplot, gplot} |
5576 | 27 ## @end deftypefn |
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 | 30 |
31 if (nargin < 1 || nargin > 3 || nargout > 0) | |
6498 | 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 | 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 | 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 | 44 endif |
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 | 197 endfunction |
198 | |
199 | |
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 | 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 |