Mercurial > hg > octave-lyh
annotate scripts/plot/__stem__.m @ 8232:c6e9ff62c64a
Fix subplot for column vector of children in figure
author | David Bateman <dbateman@free.fr> |
---|---|
date | Thu, 16 Oct 2008 16:23:14 -0400 |
parents | 73d6b71788c0 |
children | 6ef647359f07 |
rev | line source |
---|---|
7217 | 1 ## Copyright (C) 2006, 2007 Michel D. Schmid |
2 ## | |
3 ## This file is part of Octave. | |
4 ## | |
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. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
16 ## along with Octave; see the file COPYING. If not, see | |
17 ## <http://www.gnu.org/licenses/>. | |
18 | |
19 ## Undocumented internal function | |
20 | |
21 ## Author: Michel D. Schmid <michaelschmid@users.sourceforge.net> | |
22 ## Adapted-by: jwe | |
23 | |
24 function h = __stem__ (have_z, varargin) | |
25 | |
7218 | 26 if (have_z) |
27 caller = "stem3"; | |
28 else | |
29 caller = "stem"; | |
30 endif | |
7217 | 31 |
7218 | 32 [ax, varargin, nargin] = __plt_get_axis_arg__ (caller, varargin{:}); |
7217 | 33 |
8070
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
34 [x, y, z, dofill, llc, ls, mmc, ms, varargin] = ... |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
35 check_stem_arg (have_z, varargin{:}); |
7217 | 36 |
37 oldax = gca (); | |
38 unwind_protect | |
39 axes (ax); | |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
40 hold_state = get (ax, "nextplot"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
41 newplot (); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
42 h = []; |
7217 | 43 |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
44 nx = rows (x); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
45 for i = 1: columns (x) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
46 if (have_z) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
47 xt = x(:)'; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
48 xt = [xt; xt; NaN(1, nx)](:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
49 yt = y(:)'; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
50 yt = [yt; yt; NaN(1, nx)](:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
51 zt = z(:)'; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
52 zt = [zeros(1, nx); zt; NaN(1, nx)](:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
53 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
54 xt = x(:, i)'; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
55 xt = [xt; xt; NaN(1, nx)](:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
56 yt = y(:, i)'; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
57 yt = [zeros(1, nx); yt; NaN(1, nx)](:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
58 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
59 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
60 hg = hggroup (); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
61 h = [h; hg]; |
8075
a028a5960e18
Fix for hold with no figures/axes. Set prop/val pairs to hggroups rather than underlying objects. Fix for equality test in array_property
David Bateman <dbateman@free.fr>
parents:
8070
diff
changeset
|
62 args = __add_datasource__ (caller, hg, {"x", "y", "z"}, varargin{:}); |
8070
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
63 |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
64 if (i == 1) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
65 set (ax, "nextplot", "add"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
66 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
67 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
68 if (isempty (llc)) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
69 lc = __next_line_color__ (); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
70 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
71 lc = llc; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
72 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
73 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
74 if (isempty (mmc)) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
75 mc = lc; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
76 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
77 mc = mmc; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
78 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
79 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
80 if (dofill) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
81 fc = mc; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
82 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
83 fc = "none"; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
84 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
85 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
86 if (have_z) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
87 h_stems = plot3 (xt, yt, zt, "color", lc, "linestyle", ls, |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
88 "parent", hg, x, y, z, "color", mc, |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
89 "marker", ms, "linestyle", "none", |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
90 "markerfacecolor", fc, "parent", hg); |
7217 | 91 |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
92 h_baseline = []; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
93 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
94 h_stems = plot (xt, yt, "color", lc, "linestyle", ls, |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
95 "parent", hg, x(:,i), y(:, i), "color", mc, "marker", |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
96 ms, "linestyle", "none", "markerfacecolor", |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
97 fc, "parent", hg); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
98 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
99 if (i == 1) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
100 x_axis_range = get (ax, "xlim"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
101 h_baseline = line (x_axis_range, [0, 0], "color", [0, 0, 0]); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
102 set (h_baseline, "handlevisibility", "off"); |
8056
9a6f4713f765
Add area, bar, quiver and stair series graphics objects. Document them
David Bateman <dbateman@free.fr>
parents:
8052
diff
changeset
|
103 set (h_baseline, "xliminclude", "off"); |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
104 addlistener (ax, "xlim", @update_xlim); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
105 addlistener (h_baseline, "ydata", @update_baseline); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
106 addlistener (h_baseline, "visible", @update_baseline); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
107 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
108 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
109 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
110 ## Setup the hggroup and listeners |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
111 addproperty ("showbaseline", hg, "radio", "{on}|off"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
112 addproperty ("basevalue", hg, "data", 0); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
113 addproperty ("baseline", hg, "data", h_baseline); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
114 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
115 if (!have_z) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
116 addlistener (hg, "showbaseline", @show_baseline); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
117 addlistener (hg, "basevalue", @move_baseline); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
118 endif |
7217 | 119 |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
120 addproperty ("color", hg, "linecolor", lc); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
121 addproperty ("linewidth", hg, "linelinewidth", 0.5); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
122 addproperty ("linestyle", hg, "linelinestyle", ls); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
123 addproperty ("marker", hg, "linemarker", ms); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
124 addproperty ("markerfacecolor", hg, "linemarkerfacecolor", fc); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
125 addproperty ("markersize", hg, "linemarkersize", 6); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
126 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
127 addlistener (hg, "color", @update_props); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
128 addlistener (hg, "linewidth", @update_props); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
129 addlistener (hg, "linestyle", @update_props); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
130 addlistener (hg, "marker", @update_props); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
131 addlistener (hg, "markerfacecolor", @update_props); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
132 addlistener (hg, "markersize", @update_props); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
133 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
134 addproperty ("xdata", hg, "data", x(:, i)); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
135 addproperty ("ydata", hg, "data", y(:, i)); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
136 if (have_z) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
137 addproperty ("zdata", hg, "data", z(:, i)); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
138 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
139 addproperty ("zdata", hg, "data", []); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
140 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
141 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
142 addlistener (hg, "xdata", @update_data); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
143 addlistener (hg, "ydata", @update_data); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
144 addlistener (hg, "zdata", @update_data); |
8075
a028a5960e18
Fix for hold with no figures/axes. Set prop/val pairs to hggroups rather than underlying objects. Fix for equality test in array_property
David Bateman <dbateman@free.fr>
parents:
8070
diff
changeset
|
145 |
8079
082fa7859574
Additional do not call set with empty arguments fixes
David Bateman <dbateman@free.fr>
parents:
8075
diff
changeset
|
146 if (! isempty (args)) |
082fa7859574
Additional do not call set with empty arguments fixes
David Bateman <dbateman@free.fr>
parents:
8075
diff
changeset
|
147 set (hg, args{:}); |
082fa7859574
Additional do not call set with empty arguments fixes
David Bateman <dbateman@free.fr>
parents:
8075
diff
changeset
|
148 endif |
8075
a028a5960e18
Fix for hold with no figures/axes. Set prop/val pairs to hggroups rather than underlying objects. Fix for equality test in array_property
David Bateman <dbateman@free.fr>
parents:
8070
diff
changeset
|
149 if (i == 1 && !isempty(h_baseline)) |
a028a5960e18
Fix for hold with no figures/axes. Set prop/val pairs to hggroups rather than underlying objects. Fix for equality test in array_property
David Bateman <dbateman@free.fr>
parents:
8070
diff
changeset
|
150 set (h_baseline, "parent", get (hg, "parent")); |
a028a5960e18
Fix for hold with no figures/axes. Set prop/val pairs to hggroups rather than underlying objects. Fix for equality test in array_property
David Bateman <dbateman@free.fr>
parents:
8070
diff
changeset
|
151 endif |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
152 endfor |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
153 |
7217 | 154 unwind_protect_cleanup |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
155 set (ax, "nextplot", hold_state); |
7217 | 156 axes (oldax); |
157 end_unwind_protect | |
158 endfunction | |
159 | |
8070
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
160 function [x, y, z, dofill, lc, ls, mc, ms, newargs] = check_stem_arg (have_z, varargin) |
7217 | 161 |
7218 | 162 if (have_z) |
163 caller = "stem3"; | |
164 else | |
165 caller = "stem"; | |
166 endif | |
167 | |
8070
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
168 ## Remove prop/val pairs from data to consider |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
169 i = 2; |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
170 newargs = {}; |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
171 while (i < length (varargin)) |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
172 if (ischar (varargin{i}) && !(strcmpi ("fill", varargin{i}) |
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
173 || strcmpi ("filled", varargin{i}))) |
8070
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
174 newargs{end + 1} = varargin{i}; |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
175 newargs{end + 1} = varargin{i + 1}; |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
176 nargin = nargin - 2; |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
177 varargin(i:i+1) = []; |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
178 else |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
179 i++; |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
180 endif |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
181 endwhile |
3b53b25e2550
Add data sources and line series
David Bateman <dbateman@free.fr>
parents:
8056
diff
changeset
|
182 |
7217 | 183 ## set specifiers to default values |
184 [lc, ls, mc, ms] = set_default_values (); | |
185 dofill = 0; | |
186 fill_2 = 0; | |
187 linespec_2 = 0; | |
188 z = []; | |
189 | |
190 ## check input arguments | |
191 if (nargin == 2) | |
192 if (have_z) | |
193 z = varargin{1}; | |
7218 | 194 x = 1:rows (z); |
195 y = 1:columns (z); | |
7217 | 196 else |
197 y = varargin{1}; | |
198 if (isvector (y)) | |
7218 | 199 x = 1:length (y); |
7217 | 200 elseif (ismatrix (y)) |
7218 | 201 x = 1:rows (y); |
7217 | 202 else |
203 error ("stem: Y must be a matrix"); | |
204 endif # in each case, x & y will be defined | |
205 endif | |
206 elseif (nargin == 3) | |
207 ## several possibilities | |
208 ## 1. the real y data | |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
209 ## 2. 'filled' |
7217 | 210 ## 3. line spec |
211 if (ischar (varargin{2})) | |
212 ## only 2. or 3. possible | |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
213 if (strcmpi ("fill", varargin{2}) || strcmpi ("filled", varargin{2})) |
7217 | 214 dofill = 1; |
215 else | |
216 ## parse the linespec | |
7218 | 217 [lc, ls, mc, ms] = stem_line_spec (caller, varargin{2}); |
7217 | 218 endif |
219 if (have_z) | |
220 z = varargin{1}; | |
7218 | 221 x = 1:rows (z); |
222 y = 1:columns (z); | |
7217 | 223 else |
224 y = varargin{1}; | |
225 if (isvector (y)) | |
7218 | 226 x = 1:length (y); |
7217 | 227 elseif (ismatrix (y)) |
7218 | 228 x = 1:rows (y); |
7217 | 229 else |
230 error ("stem: Y must be a matrix"); | |
231 endif # in each case, x & y will be defined | |
232 endif | |
233 else | |
234 if (have_z) | |
235 error ("stem3: must define X, Y and Z"); | |
236 else | |
237 ## must be the real y data | |
238 x = varargin{1}; | |
239 y = varargin{2}; | |
240 if (! (ismatrix (x) && ismatrix (y))) | |
241 error ("stem: X and Y must be matrices"); | |
242 endif | |
243 endif | |
244 endif | |
245 elseif (nargin == 4) | |
246 ## again several possibilities | |
247 ## arg2 1. real y | |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
248 ## arg2 2. 'filled' or linespec |
7217 | 249 ## arg3 1. real z |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
250 ## arg3 2. 'filled' or linespec |
7217 | 251 if (ischar (varargin{2})) |
252 ## only arg2 2. / arg3 1. & arg3 3. are possible | |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
253 if (strcmpi ("fill", varargin{2}) || strcmpi ("filled", varargin{2})) |
7217 | 254 dofill = 1; |
255 fill_2 = 1; # be sure, no second "fill" is in the arguments | |
256 else | |
257 ## must be a linespec | |
7218 | 258 [lc, ls, mc, ms] = stem_line_spec (caller, varargin{2}); |
7217 | 259 linespec_2 = 1; |
260 endif | |
261 if (have_z) | |
262 z = varargin{1}; | |
7218 | 263 x = 1:rows (z); |
264 y = 1:columns (z); | |
7217 | 265 else |
266 y = varargin{1}; | |
267 if (isvector (y)) | |
7218 | 268 x = 1:length (y); |
7217 | 269 elseif (ismatrix (y)) |
7218 | 270 x = 1:rows (y); |
7217 | 271 else |
272 error ("stem: Y must be a matrix"); | |
273 endif # in each case, x & y will be defined | |
274 endif | |
275 else | |
276 if (have_z) | |
277 x = varargin{1}; | |
278 y = varargin{2}; | |
279 z = varargin{3}; | |
280 if (! (ismatrix (x) && ismatrix (y) && ismatrix (z))) | |
281 error ("stem3: X, Y and Z must be matrices"); | |
282 endif | |
283 else | |
284 ## must be the real y data | |
285 x = varargin{1}; | |
286 y = varargin{2}; | |
287 if (! (ismatrix (x) && ismatrix (y))) | |
288 error ("stem: X and Y must be matrices"); | |
289 endif | |
290 endif | |
291 endif # if ischar(varargin{2}) | |
292 if (! have_z) | |
7218 | 293 ## varargin{3} must be char |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
294 ## check for "fill |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
295 if ((strcmpi (varargin{3}, "fill") || strcmpi (varargin{3}, "filled")) |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
296 && fill_2) |
7218 | 297 error ("stem: duplicate fill argument"); |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
298 elseif (strcmpi ("fill", varargin{3}) && linespec_2) |
7217 | 299 ## must be "fill" |
300 dofill = 1; | |
301 fill_2 = 1; | |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
302 elseif ((strcmpi (varargin{3}, "fill") || strcmpi (varargin{3}, "filled")) |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
303 && !linespec_2) |
7217 | 304 ## must be "fill" |
305 dofill = 1; | |
306 fill_2 = 1; | |
307 elseif (! linespec_2) | |
308 ## must be linespec | |
7218 | 309 [lc, ls, mc, ms] = stem_line_spec (caller, varargin{3}); |
7217 | 310 linespec_2 = 1; |
311 endif | |
312 endif | |
313 elseif (nargin == 5) | |
314 if (have_z) | |
315 x = varargin{1}; | |
316 y = varargin{2}; | |
317 z = varargin{3}; | |
318 if (! (ismatrix (x) && ismatrix (y) && ismatrix (z))) | |
319 error ("stem3: X, Y and Z must be matrices"); | |
320 endif | |
321 else | |
322 x = varargin{1}; | |
323 y = varargin{2}; | |
324 if (! (ismatrix (x) && ismatrix (y))) | |
7218 | 325 error ("stem: X and Y must be matrices"); |
7217 | 326 endif |
327 endif | |
328 | |
329 if (! have_z) | |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
330 if (strcmpi (varargin{3}, "fill") || strcmpi (varargin{3}, "filled")) |
7217 | 331 dofill = 1; |
332 fill_2 = 1; # be sure, no second "fill" is in the arguments | |
333 else | |
334 ## must be a linespec | |
7218 | 335 [lc, ls, mc, ms] = stem_line_spec (caller, varargin{3}); |
7217 | 336 linespec_2 = 1; |
337 endif | |
338 endif | |
339 | |
340 ## check for "fill" .. | |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
341 if ((strcmpi (varargin{4}, "fill") || strcmpi (varargin{4}, "filled")) |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
342 && fill_2) |
7218 | 343 error ("%s: duplicate fill argument", caller); |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
344 elseif ((strcmpi (varargin{4}, "fill") || strcmpi (varargin{4}, "filled")) |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
345 && linespec_2) |
7217 | 346 ## must be "fill" |
347 dofill = 1; | |
348 fill_2 = 1; | |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
349 elseif (!strcmpi (varargin{4}, "fill") && !strcmpi (varargin{4}, "filled") |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
350 && !linespec_2) |
7217 | 351 ## must be linespec |
7218 | 352 [lc, ls, mc, ms] = stem_line_spec (caller, varargin{4}); |
7217 | 353 linespec_2 = 1; |
354 endif | |
355 elseif (nargin == 6 && have_z) | |
356 x = varargin{1}; | |
357 y = varargin{2}; | |
358 z = varargin{3}; | |
359 if (! (ismatrix (x) && ismatrix (y) && ismatrix (z))) | |
360 error ("stem3: X, Y and Z must be matrices"); | |
361 endif | |
362 | |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
363 if (strcmpi (varargin{4}, "fill") || strcmpi (varargin{4}, "filled")) |
7217 | 364 dofill = 1; |
365 fill_2 = 1; # be sure, no second "fill" is in the arguments | |
366 else | |
367 ## must be a linespec | |
7218 | 368 [lc, ls, mc, ms] = stem_line_spec (caller, varargin{4}); |
7217 | 369 linespec_2 = 1; |
370 endif | |
371 | |
372 ## check for "fill" .. | |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
373 if ((strcmpi (varargin{5}, "fill") || strcmpi (varargin{5}, "filled")) |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
374 && fill_2) |
7218 | 375 error ("stem3: duplicate fill argument"); |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
376 elseif ((strcmpi (varargin{5}, "fill") || strcmpi (varargin{5}, "filled")) |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
377 && linespec_2) |
7217 | 378 ## must be "fill" |
379 dofill = 1; | |
380 fill_2 = 1; | |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
381 elseif (!strcmpi (varargin{5}, "fill") && !strcmpi (varargin{5}, "filled") |
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
382 && !linespec_2) |
7217 | 383 ## must be linespec |
7218 | 384 [lc, ls, mc, ms] = stem_line_spec (caller, varargin{5}); |
7217 | 385 linespec_2 = 1; |
386 endif | |
387 else | |
7218 | 388 error ("%s: incorrect number of arguments", caller); |
7217 | 389 endif |
390 | |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
391 ## Check sizes of x, y and z |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
392 if (have_z) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
393 if (!size_equal (x, y, z)) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
394 error ("stem3: inconsistent size of x, y and z"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
395 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
396 x = x(:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
397 y = y(:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
398 z = z(:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
399 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
400 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
401 if (isvector (x)) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
402 x = x(:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
403 if (isvector (y)) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
404 if (length (x) != length (y)) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
405 error ("stem: inconsistent size of x and y"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
406 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
407 y = y(:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
408 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
409 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
410 if (length (x) == rows (y)) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
411 x = repmat (x(:), 1, columns (y)); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
412 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
413 error ("stem: inconsistent size of x and y"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
414 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
415 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
416 elseif (!size_equal (x, y )) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
417 error ("stem: inconsistent size of x and y"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
418 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
419 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
420 |
7217 | 421 endfunction |
422 | |
7218 | 423 function [lc, ls, mc, ms] = stem_line_spec (caller, str) |
7217 | 424 if (! ischar (str)) |
7218 | 425 error ("%s: expecting argument to be \"fill\" or a string of specifiers", |
426 caller); | |
7217 | 427 endif |
428 [lc, ls, mc, ms] = set_default_values (); | |
429 ## Parse the line specifier string. | |
430 cur_props = __pltopt__ ("stem", str, false); | |
431 for i = 1:length(cur_props) | |
432 if (isfield (cur_props(i), "color") && ! isempty (cur_props(i).color)); # means line color | |
433 mc = lc = cur_props(i).color; | |
434 elseif (isfield (cur_props(i), "linestyle")) | |
435 ls = cur_props(i).linestyle; | |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
436 elseif (isfield (cur_props(i), "marker") && ! strcmpi (cur_props(i).marker, "none")) |
7217 | 437 ms = cur_props(i).marker; |
438 endif | |
439 endfor | |
440 endfunction | |
441 | |
442 function [lc, ls, mc, ms] = set_default_values () | |
443 ## set default values | |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
444 mc = []; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
445 lc = []; |
7217 | 446 ls = "-"; |
447 ms = "o"; | |
448 endfunction | |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
449 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
450 function update_xlim (h, d) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
451 kids = get (h, "children"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
452 xlim = get (h, "xlim"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
453 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
454 for i = 1 : length (kids) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
455 obj = get (kids (i)); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
456 if (strcmp (obj.type, "hggroup") && isfield (obj, "baseline")) |
8056
9a6f4713f765
Add area, bar, quiver and stair series graphics objects. Document them
David Bateman <dbateman@free.fr>
parents:
8052
diff
changeset
|
457 if (any (get (obj.baseline, "xdata") != xlim)) |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
458 set (obj.baseline, "xdata", xlim); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
459 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
460 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
461 endfor |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
462 endfunction |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
463 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
464 function update_baseline (h, d) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
465 visible = get (h, "visible"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
466 ydata = get (h, "ydata")(1); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
467 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
468 kids = get (get (h, "parent"), "children"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
469 for i = 1 : length (kids) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
470 obj = get (kids (i)); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
471 if (strcmp (obj.type, "hggroup") && isfield (obj, "baseline") |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
472 && obj.baseline == h) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
473 ## Only alter if changed to avoid recursion of the listener functions |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
474 if (! strcmpi (get (kids(i), "showbaseline"), visible)) |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
475 set (kids (i), "showbaseline", visible); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
476 endif |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
8079
diff
changeset
|
477 if (! strcmpi (get (kids(i), "basevalue"), visible)) |
8052
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
478 set (kids (i), "basevalue", ydata); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
479 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
480 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
481 endfor |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
482 endfunction |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
483 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
484 function show_baseline (h, d) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
485 set (get (h, "baseline"), "visible", get (h, "showbaseline")); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
486 endfunction |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
487 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
488 function move_baseline (h, d) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
489 b0 = get (h, "basevalue"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
490 bl = get (h, "baseline"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
491 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
492 if (get (bl, "ydata") != [b0, b0]) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
493 set (bl, "ydata", [b0, b0]); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
494 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
495 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
496 kids = get (h, "children"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
497 yt = get(h, "ydata")(:)'; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
498 ny = length (yt); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
499 yt = [b0 * ones(1, ny); yt; NaN(1, ny)](:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
500 set (kids(1), "ydata", yt); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
501 endfunction |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
502 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
503 function update_props (h, d) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
504 kids = get (h, "children"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
505 set (kids(1), "color", get (h, "color"), |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
506 "linewidth", get (h, "linewidth"), |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
507 "linestyle", get (h, "linestyle")); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
508 set (kids(2), "color", get (h, "color"), |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
509 "marker", get (h, "marker"), |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
510 "markerfacecolor", get (h, "markerfacecolor"), |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
511 "markersize", get (h, "markersize")); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
512 endfunction |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
513 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
514 function update_data (h, d) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
515 x = get (h, "xdata"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
516 y = get (h, "ydata"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
517 z = get (h, "zdata"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
518 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
519 if (!isempty (z) && size_equal (x, y, z)) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
520 error ("stem3: inconsistent size of x, y and z"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
521 elseif (numel(x) != numel (y)) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
522 error ("stem: inconsistent size of x and y"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
523 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
524 bl = get (h, "basevalue"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
525 nx = numel (x); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
526 x = x(:)'; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
527 xt = [x; x; NaN(1, nx)](:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
528 if (! isempty (z)) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
529 y = y(:)'; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
530 yt = [y; y; NaN(1, nx)](:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
531 z = z(:)'; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
532 zt = [bl * ones(1, nx); z; NaN(1, nx)](:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
533 else |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
534 y = y(:)'; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
535 yt = [bl * ones(1, nx); y; NaN(1, nx)](:); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
536 zt = []; |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
537 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
538 |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
539 kids = get (h, "children"); |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
540 set (kids(1), "xdata", xt, "ydata", yt, "zdata", zt) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
541 set (kids(2), "xdata", x, "ydata", y, "zdata", z) |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
542 endif |
961d4c52ffae
Convert stem and stem3 to use stem series objects
David Bateman <dbateman@free.fr>
parents:
7218
diff
changeset
|
543 endfunction |