Mercurial > hg > octave-lyh
annotate scripts/plot/private/__scatter__.m @ 10236:8e58c402ebb2
Accelerate colormap colored scatter plots
author | David Bateman <dbateman@free.fr> |
---|---|
date | Mon, 01 Feb 2010 20:17:34 +0100 |
parents | 4516a0c97ced |
children | 95c3e38098bf |
rev | line source |
---|---|
8920 | 1 ## Copyright (C) 2007, 2008, 2009 David Bateman |
7189 | 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 | |
8812
7d48766c21a5
use consistent format for doc strings of internal functions
John W. Eaton <jwe@octave.org>
parents:
8257
diff
changeset
|
19 ## -*- texinfo -*- |
7d48766c21a5
use consistent format for doc strings of internal functions
John W. Eaton <jwe@octave.org>
parents:
8257
diff
changeset
|
20 ## @deftypefn {Function File} {@var{hg} =} __scatter__ (@dots{}) |
7189 | 21 ## Undocumented internal function. |
8812
7d48766c21a5
use consistent format for doc strings of internal functions
John W. Eaton <jwe@octave.org>
parents:
8257
diff
changeset
|
22 ## @end deftypefn |
7189 | 23 |
8257 | 24 function hg = __scatter__ (varargin) |
7191 | 25 |
26 h = varargin{1}; | |
27 nd = varargin{2}; | |
28 fcn = varargin{3}; | |
29 x = varargin{4}(:); | |
30 y = varargin{5}(:); | |
7189 | 31 istart = 6; |
7191 | 32 |
7189 | 33 if (nd == 3) |
7191 | 34 z = varargin{6}(:); |
7421 | 35 idx = isnan(x) | isnan (y) | isnan (z); |
36 x (idx) = []; | |
37 y (idx) = []; | |
38 z (idx) = []; | |
7189 | 39 istart = 7; |
40 else | |
7421 | 41 idx = isnan(x) | isnan (y); |
42 x (idx) = []; | |
43 y (idx) = []; | |
7191 | 44 z = zeros (length (x), 0); |
7189 | 45 endif |
46 | |
47 firstnonnumeric = Inf; | |
48 for i = istart:nargin | |
7191 | 49 if (! isnumeric (varargin{i})) |
7189 | 50 firstnonnumeric = i; |
51 break; | |
52 endif | |
53 endfor | |
54 | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
55 if (istart <= nargin) |
7191 | 56 s = varargin{istart}; |
7189 | 57 if (isempty (s)) |
7603
689652eb95d1
fix for scatter markersize
David Bateman <dbateman@free.fr>
parents:
7421
diff
changeset
|
58 s = 6; |
7189 | 59 endif |
60 else | |
7603
689652eb95d1
fix for scatter markersize
David Bateman <dbateman@free.fr>
parents:
7421
diff
changeset
|
61 s = 6; |
7189 | 62 endif |
63 | |
64 if (istart < nargin && firstnonnumeric > istart + 1) | |
7191 | 65 c = varargin{istart + 1}; |
7189 | 66 if (isvector (c)) |
10078 | 67 if (columns (c) != 3) |
8257 | 68 c = c(:); |
69 endif | |
7189 | 70 endif |
7191 | 71 elseif (firstnonnumeric == istart + 1 && ischar (varargin{istart + 1})) |
7189 | 72 c = varargin{istart + 1}; |
73 firstnonnumeric++; | |
74 else | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
75 c = []; |
7189 | 76 endif |
77 | |
78 newargs = {}; | |
79 filled = false; | |
80 have_marker = false; | |
81 marker = "o"; | |
82 iarg = firstnonnumeric; | |
83 while (iarg <= nargin) | |
7191 | 84 arg = varargin{iarg++}; |
8190
73d6b71788c0
use case-insensitive comparison for graphics properties; misc style fixes
John W. Eaton <jwe@octave.org>
parents:
7768
diff
changeset
|
85 if (ischar (arg) && strncmpi (arg, "filled", 6)) |
7189 | 86 filled = true; |
7768
a2d9f325b65a
Use isschar instead of deprecated isstr
Rafael Laboissiere <rafael@debian.org>
parents:
7603
diff
changeset
|
87 elseif ((ischar (arg) || iscell (arg)) && ! have_marker) |
8257 | 88 [linespec, valid] = __pltopt__ (fcn, arg, false); |
7189 | 89 if (valid) |
90 have_marker = true; | |
91 marker = linespec.marker; | |
92 if (strncmp (marker, "none", 4)) | |
93 marker = "o"; | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
94 elseif (isempty (marker)) |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
95 [dummy, marker] = __next_line_style__ (); |
7189 | 96 endif |
97 else | |
8257 | 98 error ("%s: invalid linespec", fcn); |
7189 | 99 endif |
100 else | |
101 newargs{end+1} = arg; | |
102 if (iarg <= nargin) | |
103 newargs{end+1} = varagin{iarg++}; | |
104 endif | |
105 endif | |
106 endwhile | |
107 | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
108 if (isempty (c)) |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
109 c = __next_line_color__(); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
110 endif |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
111 |
8257 | 112 hg = hggroup (); |
113 newargs = __add_datasource__ (fcn, hg, {"x", "y", "z", "c", "size"}, | |
114 newargs{:}); | |
115 | |
116 addproperty ("xdata", hg, "data", x); | |
117 addproperty ("ydata", hg, "data", y); | |
118 addproperty ("zdata", hg, "data", z); | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
119 if (ischar (c)) |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
120 addproperty ("cdata", hg, "data", __color_str_rgb__ (c)); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
121 else |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
122 addproperty ("cdata", hg, "data", c); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
123 endif |
10078 | 124 addproperty ("sizedata", hg, "data", s); |
8257 | 125 addlistener (hg, "xdata", @update_data); |
126 addlistener (hg, "ydata", @update_data); | |
127 addlistener (hg, "zdata", @update_data); | |
128 addlistener (hg, "cdata", @update_data); | |
129 addlistener (hg, "sizedata", @update_data); | |
130 | |
10083
614ad9e7a17b
use patches again in scatter plots
Jaroslav Hajek <highegg@gmail.com>
parents:
10082
diff
changeset
|
131 if (numel (x) <= 100) |
10078 | 132 |
133 ## For small number of points, we'll construct an object for each point. | |
134 | |
135 if (numel (s) == 1) | |
136 s = repmat (s, numel(x), 1); | |
137 endif | |
138 | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
139 if (ischar (c) || rows(c) == 1) |
10078 | 140 for i = 1 : numel (x) |
141 if (filled) | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
142 h = __go_patch__ (hg, "xdata", x(i), "ydata", y(i), "zdata", z(i,:), |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
143 "faces", 1, "vertices", [x(i), y(i), z(i,:)], |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
144 "facecolor", "none", "edgecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
145 "marker", marker, "markersize", s(i), |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
146 "markeredgecolor", none, "markerfacecolor", c, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
147 "linestyle", "none"); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
148 else |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
149 h = __go_patch__ (hg, "xdata", x(i), "ydata", y(i), "zdata", z(i,:), |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
150 "faces", 1, "vertices", [x(i), y(i), z(i,:)], |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
151 "facecolor", "none", "edgecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
152 "marker", marker, "markersize", s(i), |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
153 "markeredgecolor", c, "markerfacecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
154 "linestyle", "none"); |
10078 | 155 endif |
156 endfor | |
157 else | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
158 for i = 1 : numel (x) |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
159 if (filled) |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
160 h = __go_patch__ (hg, "xdata", x(i), "ydata", y(i), "zdata", z(i,:), |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
161 "faces", 1, "vertices", [x(i), y(i), z(i,:)], |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
162 "facecolor", "none", "edgecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
163 "marker", marker, "markersize", s(i), |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
164 "markeredgecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
165 "markerfacecolor", "flat", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
166 "cdata", c(i,:), "linestyle", "none"); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
167 else |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
168 h = __go_patch__ (hg, "xdata", x(i), "ydata", y(i), "zdata", z(i,:), |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
169 "faces", 1, "vertices", [x(i), y(i), z(i,:)], |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
170 "facecolor", "none", "edgecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
171 "marker", marker, "markersize", s(i), |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
172 "markeredgecolor", "flat", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
173 "markerfacecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
174 "cdata", c(i,:), "linestyle", "none"); |
10078 | 175 |
176 endif | |
177 endfor | |
178 endif | |
179 | |
8257 | 180 else |
10078 | 181 |
182 ## For larger numbers of points, we split the points by common color. | |
183 | |
184 vert = [x, y, z]; | |
185 | |
186 if (ischar (c) || rows (c) == 1) | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
187 h = render_size_color (hg, vert, s, c, marker, filled, false); |
10236
8e58c402ebb2
Accelerate colormap colored scatter plots
David Bateman <dbateman@free.fr>
parents:
10135
diff
changeset
|
188 elseif (columns (c) == 1) |
8e58c402ebb2
Accelerate colormap colored scatter plots
David Bateman <dbateman@free.fr>
parents:
10135
diff
changeset
|
189 h = render_size_color (hg, vert, s, c, marker, filled, true); |
10078 | 190 else |
191 [cc, idx] = unique_idx (c, "rows"); | |
192 if (isscalar (s)) | |
193 for i = 1:rows (x) | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
194 h = render_size_color (hg, vert(idx{i},:), s, cc(i,:), |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
195 marker, filled, true); |
10078 | 196 endfor |
197 else | |
198 for i = 1:rows (x) | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
199 h = render_size_color (hg, vert(idx{i},:), s(idx{i}), cc(i,:), |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
200 marker, filled, true); |
10078 | 201 endfor |
8257 | 202 endif |
7189 | 203 endif |
10078 | 204 endif |
205 | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
206 if (! ischar (c) && rows (c) > 1) |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
207 ax = get (hg, "parent"); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
208 clim = get (ax, "clim"); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
209 if (min(c(:)) < clim(1)) |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
210 clim(1) = min(c(:)); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
211 set (ax, "clim", clim); |
7189 | 212 endif |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
213 if (max(c(:)) > clim(2)) |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
214 set (ax, "clim", [clim(1), max(c(:))]); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
215 endif |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
216 endif |
7189 | 217 |
8257 | 218 addproperty ("linewidth", hg, "patchlinewidth", 0.5); |
219 addproperty ("marker", hg, "patchmarker", marker); | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
220 if (filled) |
8257 | 221 addproperty ("markeredgecolor", hg, "patchmarkeredgecolor", "none"); |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
222 if (ischar (c) || rows (c) == 1) |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
223 addproperty ("markerfacecolor", hg, "patchmarkerfacecolor", c); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
224 else |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
225 addproperty ("markerfacecolor", hg, "patchmarkerfacecolor", "flat"); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
226 endif |
8257 | 227 else |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
228 addproperty ("markerfacecolor", hg, "patchmarkerfacecolor", "none"); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
229 if (ischar (c) || rows (c) == 1) |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
230 addproperty ("markeredgecolor", hg, "patchmarkeredgecolor", c); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
231 else |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
232 addproperty ("markeredgecolor", hg, "patchmarkeredgecolor", "flat"); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
233 endif |
8257 | 234 endif |
235 addlistener (hg, "linewidth", @update_props); | |
236 addlistener (hg, "marker", @update_props); | |
237 addlistener (hg, "markerfacecolor", @update_props); | |
238 addlistener (hg, "markeredgecolor", @update_props); | |
239 | |
240 if (! isempty (newargs)) | |
241 set (hg, newargs{:}) | |
242 endif | |
243 | |
7189 | 244 endfunction |
8257 | 245 |
10078 | 246 function [y, idx] = unique_idx (x, byrows) |
247 if (nargin == 2) | |
248 [xx, idx] = sortrows (x); | |
249 n = rows (x); | |
250 jdx = find (any (xx(1:n-1,:) != xx(2:n,:), 2)); | |
10082
28af9aa6f9ed
fix typos in __scatter__
Jaroslav Hajek <highegg@gmail.com>
parents:
10078
diff
changeset
|
251 jdx(end+1) = n; |
10078 | 252 y = xx(jdx,:); |
253 else | |
254 [xx, idx] = sort (x); | |
255 n = length (x); | |
256 jdx = find (xx(1:n-1,:) != xx(2:n,:)); | |
10082
28af9aa6f9ed
fix typos in __scatter__
Jaroslav Hajek <highegg@gmail.com>
parents:
10078
diff
changeset
|
257 jdx(end+1) = n; |
10078 | 258 y = xx(jdx); |
259 endif | |
260 | |
261 if (nargin == 2 || columns (x) == 1) | |
262 idx = mat2cell (idx, diff ([0; jdx]), 1); | |
263 else | |
264 idx = mat2cell (idx, 1, diff ([0, jdx])); | |
265 endif | |
266 endfunction | |
267 | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
268 function h = render_size_color(hg, vert, s, c, marker, filled, isflat) |
10078 | 269 if (isscalar (s)) |
270 x = vert(:,1); | |
271 y = vert(:,2); | |
272 z = vert(:,3:end); | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
273 if (ischar (c) || !isflat) |
10083
614ad9e7a17b
use patches again in scatter plots
Jaroslav Hajek <highegg@gmail.com>
parents:
10082
diff
changeset
|
274 if (filled) |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
275 h = __go_patch__ (hg, "xdata", x, "ydata", y, "zdata", z, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
276 "faces", 1, "vertices", vert, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
277 "facecolor", "none", "edgecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
278 "marker", marker, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
279 "markeredgecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
280 "markerfacecolor", c, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
281 "markersize", s, "linestyle", "none"); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
282 else |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
283 h = __go_patch__ (hg, "xdata", x, "ydata", y, "zdata", z, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
284 "faces", 1, "vertices", vert, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
285 "facecolor", "none", "edgecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
286 "marker", marker, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
287 "markeredgecolor", c, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
288 "markerfacecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
289 "markersize", s, "linestyle", "none"); |
10083
614ad9e7a17b
use patches again in scatter plots
Jaroslav Hajek <highegg@gmail.com>
parents:
10082
diff
changeset
|
290 endif |
614ad9e7a17b
use patches again in scatter plots
Jaroslav Hajek <highegg@gmail.com>
parents:
10082
diff
changeset
|
291 else |
614ad9e7a17b
use patches again in scatter plots
Jaroslav Hajek <highegg@gmail.com>
parents:
10082
diff
changeset
|
292 if (filled) |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
293 h = __go_patch__ (hg, "xdata", x, "ydata", y, "zdata", z, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
294 "faces", 1, "vertices", vert, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
295 "facecolor", "none", "edgecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
296 "marker", marker, "markersize", s, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
297 "markeredgecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
298 "markerfacecolor", "flat", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
299 "cdata", c, "linestyle", "none"); |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
300 else |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
301 h = __go_patch__ (hg, "xdata", x, "ydata", y, "zdata", z, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
302 "faces", 1, "vertices", vert, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
303 "facecolor", "none", "edgecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
304 "marker", marker, "markersize", s, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
305 "markeredgecolor", "flat", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
306 "markerfacecolor", "none", |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
307 "cdata", c, "linestyle", "none"); |
10083
614ad9e7a17b
use patches again in scatter plots
Jaroslav Hajek <highegg@gmail.com>
parents:
10082
diff
changeset
|
308 endif |
10078 | 309 endif |
310 else | |
311 ## FIXME: round the size to one decimal place. It's not quite right, though. | |
312 [ss, idx] = unique_idx (ceil (s*10) / 10); | |
313 for i = 1:rows (ss) | |
10135
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
314 h = render_size_color (hg, vert(idx{i},:), ss(i), c, |
4516a0c97ced
Handle linestyleorder. Remove @ markers. Treat edgecolor, markeredgecolor and markerfacecolor correctly in scatter.
David Bateman <dbateman@free.fr>
parents:
10083
diff
changeset
|
315 marker, filled, isflat); |
10078 | 316 endfor |
317 endif | |
318 endfunction | |
319 | |
8257 | 320 function update_props (h, d) |
321 lw = get (h, "linewidth"); | |
322 m = get (h, "marker"); | |
323 fc = get (h, "markerfacecolor"); | |
324 ec = get (h, "markeredgecolor"); | |
325 kids = get (h, "children"); | |
326 | |
327 for i = 1 : numel (kids) | |
328 set (kids (i), "linewidth", lw, "marker", m, "markerfacecolor", fc, | |
329 "edgecolor", ec) | |
330 endfor | |
331 endfunction | |
332 | |
333 function update_data (h, d) | |
334 x1 = get (h, "xdata"); | |
335 y1 = get (h, "ydata"); | |
336 z1 = get (h, "zdata"); | |
337 c1 = get (h, "cdata"); | |
338 if (!ischar (c1) && rows (c1) == 1) | |
339 c1 = repmat (c1, numel (x1), 1); | |
340 endif | |
341 size1 = get (h, "sizedata"); | |
342 if (numel (size1) == 1) | |
343 size1 = repmat (size1, numel (x1), 1); | |
344 endif | |
345 hlist = get (h, "children"); | |
346 if (ischar (c1)) | |
9085
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
347 if (isempty (z1)) |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
348 for i = 1 : length (hlist) |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
349 set (hlist(i), "vertices", [x1(i), y1(i)], "cdata", c1, |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
350 "markersize", size1(i)); |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
351 endfor |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
352 else |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
353 for i = 1 : length (hlist) |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
354 set (hlist(i), "vertices", [x1(i), y1(i), z1(i)], "cdata", c1, |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
355 "markersize", size1(i)); |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
356 endfor |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
357 endif |
8257 | 358 else |
9085
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
359 if (isempty (z1)) |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
360 for i = 1 : length (hlist) |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
361 set (hlist(i), "vertices", [x1(i), y1(i)], "cdata", |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
362 reshape(c1(i,:),[1, size(c1)(2:end)]), "markersize", size1(i)); |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
363 endfor |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
364 else |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
365 for i = 1 : length (hlist) |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
366 set (hlist(i), "vertices", [x1(i), y1(i), z1(i)], "cdata", |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
367 reshape(c1(i,:),[1, size(c1)(2:end)]), "markersize", size1(i)); |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
368 endfor |
136e72b9afa8
correct indexing of cdata for scatter
David Bateman <dbateman@free.fr>
parents:
8920
diff
changeset
|
369 endif |
8257 | 370 endif |
371 endfunction |