samer@47: function H=scat(x,varargin) samer@47: samer@47: % SCAT: 2D/3D scatter plot using dots samer@47: % Usage: h=scat(x,...) samer@47: % samer@47: % x - matrix of 2D or 3D points samer@47: % h - returns handle graphics object samer@47: % samer@47: % Valid options samer@47: % 'perspective'::(0|1)/1 ~'use perspective projection in 3D' samer@47: % 'axis'::(0|1)/1 ~'remove axes if 0' samer@47: % 'box' ::(0|1)/1 ~'enable/disable axis box' samer@47: % 'marker'::string ~'standard matlab marker code' samer@47: % 'plotargs'::cell{} ~'extra arguments to plot' samer@47: % samer@47: % In 3D, sets up axes so that shapes are right. samer@47: samer@47: if isa(x,'data'), x=double(x); end samer@47: samer@47: marker=get(gca,'DefaultLineMarker'); samer@47: if strcmp(marker,'none'), marker=get(gcf,'DefaultLineMarker'); end samer@47: if strcmp(marker,'none'), marker=get(0,'DefaultLineMarker'); end samer@47: if strcmp(marker,'none'), marker='+'; end samer@47: opts=prefs('perspective',1,'axis',1,'box',1,'marker',marker, ... samer@47: 'plotargs',{},varargin{:}); samer@47: if size(x,2)<=4 && size(x,1)>8, x=x'; end samer@47: samer@47: if isfield(opts,'markersize'), samer@47: opts.plotargs=[{'MarkerSize',opts.markersize},opts.plotargs]; samer@47: end samer@47: samer@47: if (size(x,1)>=3), samer@47: h=plot3(x(1,:),x(2,:),x(3,:),opts.marker,opts.plotargs{:}); samer@47: if opts.perspective, camproj('perspective'); end samer@47: axis equal; samer@47: axis vis3d; samer@47: elseif ~isempty(x) samer@47: h=plot(x(1,:),x(2,:),opts.marker,opts.plotargs{:}); samer@47: else samer@47: h=[]; samer@47: end samer@47: samer@47: %set(gca,'DrawMode','fast'); samer@47: %set(gcf,'Renderer','painters'); samer@47: if (nargout>0), H=h; end samer@47: samer@47: if ~opts.box, box off; else; box on; end samer@47: if ~opts.axis, axis off; end