samer@47
|
1 function h=scatc(x,C,S,varargin)
|
samer@47
|
2 % scatc - 2 or 3D scatter plot with colours and sizes
|
samer@47
|
3 %
|
samer@47
|
4 % scatc :: [[N,E]] ~'N points in E space', [[N]]~'colours' -> handle.
|
samer@47
|
5 % scatc ::
|
samer@47
|
6 % [[N,E]] ~'N points in E space',
|
samer@47
|
7 % [[N]] ~'colours',
|
samer@47
|
8 % [[N]] | real ~'array of sizes or single marker size'
|
samer@47
|
9 % -> handle.
|
samer@47
|
10 %
|
samer@47
|
11 % If E<3, does 2D scatter, otherwise, does 3D scatter plot.
|
samer@47
|
12 % Draws filled circles.
|
samer@47
|
13
|
samer@47
|
14 if size(x,2)<=4 && size(x,1)>4, x=x'; end
|
samer@47
|
15 if nargin<3 || isempty(S),
|
samer@47
|
16 % use default marker size
|
samer@47
|
17 S=get(gca,'DefaultLineMarkerSize').^2;
|
samer@47
|
18 elseif length(S)==1,
|
samer@47
|
19 S=S*ones(size(x,2),1);
|
samer@47
|
20 end
|
samer@58
|
21 if isscalar(C), C=repmat(C,1,size(x,2)); end
|
samer@47
|
22
|
samer@47
|
23 if size(x,1)<3,
|
samer@47
|
24 h=scatter(x(1,:),x(2,:),S,C);
|
samer@47
|
25 else
|
samer@47
|
26 h=scatter3(x(1,:),x(2,:),x(3,:),S,C);
|
samer@47
|
27 end
|
samer@47
|
28
|
samer@47
|
29 set(h, ...
|
samer@47
|
30 'MarkerFaceColor','flat', ...
|
samer@47
|
31 'MarkerEdgeColor','k', ...
|
samer@47
|
32 'LineWidth',0.2, ...
|
samer@47
|
33 varargin{:});
|
samer@47
|
34
|
samer@47
|
35 axis equal;
|
samer@47
|
36 if size(x,1)>2
|
samer@47
|
37 axis vis3d;
|
samer@47
|
38 axis off;
|
samer@47
|
39 set(gca,'DrawMode','fast');
|
samer@47
|
40 set(gca,'Projection','perspective');
|
samer@47
|
41 else
|
samer@47
|
42 box on;
|
samer@47
|
43 % axis off;
|
samer@47
|
44 end
|