function a = circ_plot(alpha, format, formats, varargin) % % r = circ_plot(alpha, ...) % Plotting routines for circular data. % % Input: % alpha sample of angles in radians % [format specifies style of plot % pretty, histogram, density, [] % [formats standard matlab string for plot format (like '.r')] % % The different plotting styles take optional arguments: % pretty: fourth argument toggles between showing mean direction % and not showing it % hist: fourth argument determines number of bins/bin centers % fifth argument determines whether normalized or count % histogram is shown % sixth argument toggles between showing mean direction % and not showing it % % All of these arguments can be left empty, i.e. set to [], so that % the default value will be used. If additional arguments are % supplied in the name-value style ('linewidth', 2, ...), these are % used to change the properties of the mean resultant vector plot. % % Output: % a axis handle % % Examples: % alpha = randn(60,1)*.4+pi/2; % figure % subplot(2,2,1) % circ_plot(alpha,'pretty','ro',true,'linewidth',2,'color','r'), % title('pretty plot style') % subplot(2,2,2) % circ_plot(alpha,'hist',[],20,true,true,'linewidth',2,'color','r') % title('hist plot style') % subplot(2,2,3) % circ_plot(alpha,[],'s') % title('non-fancy plot style') % % % Circular Statistics Toolbox for Matlab % By Philipp Berens & Marc J. Velasco, 2009 % velasco@ccs.fau.edu, berens@tuebingen.mpg.de if nargin < 2 || isempty(format) format = ''; end switch format case 'pretty' % plot in 'pretty style' % draws unit circle and marks points around the circle % adds optionally the mean resultant vector if nargin < 3|| isempty(formats) formats = 'o'; end % convert angles to unit vectors z = exp(i*alpha); % create unit circle zz = exp(i*linspace(0, 2*pi, 101)); plot(real(z), imag(z), formats, real(zz), imag(zz), 'k', [-2 2], [0 0], 'k:', [0 0], [-2 2], 'k:'); set(gca, 'XLim', [-1.1 1.1], 'YLim', [-1.1 1.1]) % plot mean directions with an overlaid arrow if desired if nargin > 2 && ~isempty(varargin{1}) s = varargin{1}; else s = true; end if s r = circ_r(alpha); phi = circ_mean(alpha); hold on; zm = r*exp(i*phi); plot([0 real(zm)], [0, imag(zm)],varargin{2:end}) hold off; end axis square; set(gca,'box','off') set(gca,'xtick',[]) set(gca,'ytick',[]) text(1.2, 0, '0'); text(-.05, 1.2, '\pi/2'); text(-1.35, 0, '±\pi'); text(-.075, -1.2, '-\pi/2'); case 'hist' % plot in 'hist style' % this is essentially a wrapper for the rose plot function of matlab % adds optionally the mean resultant vector if nargin < 3|| isempty(formats) formats = '-'; end if nargin > 3 && ~isempty(varargin{1}) x = varargin{1}; else x = 20; end [t,r] = rose(alpha,x); if nargin> 3 && varargin{2} polar(t,r/sum(r),formats) mr = max(r/sum(r)); else polar(t,r,formats) mr = max(r); end % plot mean directions with an overlaid arrow if desired if nargin > 5 && ~isempty(varargin{3}) s = varargin{1}; else s = true; end if s r = circ_r(alpha) * mr; phi = circ_mean(alpha); hold on; zm = r*exp(i*phi); plot([0 real(zm)], [0, imag(zm)],varargin{4:end}) hold off; end otherwise if nargin < 3 formats = 'o'; end polar(alpha, ones(size(alpha)), formats); end a = gca;