123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- 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;
|