% check if has values higher or lower than the Ag limits
hasH=length(find(F>=Ag(end)));
hasL=length(find(F
% calc number of percentage circles to draw:
if isempty(ci)
dcircles=[1 2 5 10 15 20 25 30 50];
ncircles=3;
d=abs(1./(dcircles/max(b))-ncircles);
i=find(d==min(d));
d=dcircles(i(1));
if d*ncircles
ncircles=ncircles+1;
end
ci=[1:ncircles]*d;
g=ncircles*d;
else
ncircles=length(ci);
g=max(max(ci),max(b));
end
% plot axes, percentage circles and percent. data:
wrAx=axes('units','normalized');
ri=g*ri;
handles(end+1)=fill([-rs*g rl*g rl*g -rs*g],[-rs*g -rs*g rs*g rs*g],'w',...
'EdgeColor',borderColor);
if onAxes
set(handles(end),'facecolor','none')
end
hold on
handles(end+1)=plot([-g-ri -ri nan ri g+ri nan 0 0 nan 0 0],...
[0 0 nan 0 0 nan -g-ri -ri nan ri g+ri],':','color',lineColors);
t0=[0:360]*pi/180;
labs=[];
Ang=[1/4 3/4 5/4 7/4]*pi;
Valign={'top' 'top' 'bottom' 'bottom'};
Halign={'right' 'left' 'left' 'right'};
for i=1:ncircles
x=(ci(i)+ri)*cos(t0);
y=(ci(i)+ri)*sin(t0);
handles(end+1)=plot(x,y,':','color',lineColors);
labs(i)=text((ci(i)+ri)*cos(Ang(quad)),(ci(i)+ri)*sin(Ang(quad)),[num2str(ci(i)),'%'],...
'VerticalAlignment',Valign{quad},'HorizontalAlignment',Halign{quad},...
'BackgroundColor',percBg,'FontSize',8);
end
handles=[handles labs];
% calc colors:
if isempty(colors)
cor={};
for j=1:length(Ag)-1
cor{j}=caxcolor(Ag(j),[Ag(1) Ag(end-1)],cmap);
end
else
cor=colors;
end
% fill data:
n=sum(E,2);
if iflip, E=fliplr(E); end
for i=1:length(Ay)-1
if n(i)
t=linspace(Ay(i),Ay(i+1),20)*pi/180;
r1=ri;
for j=1:length(Ag)-1
r2=E(i,j)/n(i) *b(i) +r1;
x=[r1*cos(t(1)) r2*cos(t) r1*cos(fliplr(t))];
y=[r1*sin(t(1)) r2*sin(t) r1*sin(fliplr(t))];
if iflip, jcor=length(Ag)-1-j+1;
else, jcor=j;
end
if E(i,j)>0, handles(end+1)=fill(x,y,cor{jcor}); end
r1=r2;
end
end
end
axis equal
axis off
uistack(labs,'top')
% N S E W labels:
bg='none';
args={'BackgroundColor',bg,'FontSize',8};
h(1)=text(-g-ri, 0,'WEST', 'VerticalAlignment','top', 'HorizontalAlignment','left', args{:});
h(2)=text( g+ri, 0,'EAST', 'VerticalAlignment','top', 'HorizontalAlignment','right',args{:});
h(3)=text( 0,-g-ri,'SOUTH','VerticalAlignment','bottom','HorizontalAlignment','left', args{:});
h(4)=text( 0, g+ri,'NORTH','VerticalAlignment','top', 'HorizontalAlignment','left', args{:});
handles=[handles h];
% scale legend:
L=(g*rl-g-ri)/7;
h=(g+ri)/10;
dy=h/3;
x0=g+ri+(g*rl-g-ri)/7;
x1=x0+L;
y0=-g-ri;
if legType==1 % contimuous.
for j=1:length(Ag)-1
lab=num2str(Ag(j));
if j==1 & hasL & ~IncHiLow
lab='';
end
y1=y0+h;
handles(end+1)=fill([x0 x1 x1 x0],[y0 y0 y1 y1],cor{j});
handles(end+1)=text(x1+L/4,y0,lab,'VerticalAlignment','middle','fontsize',8);
y0=y1;
end
if ~ (hasH & ~IncHiLow)
handles(end+1)=text(x1+L/4,y0,num2str(Ag(end)),'VerticalAlignment','middle','fontsize',8);
end
elseif legType==2 % separated boxes.
for j=1:length(Ag)-1
lab=[num2str(Ag(j)) ' - ' num2str(Ag(j+1))];
if j==1 & hasL & ~IncHiLow
lab=['
end
if j==length(Ag)-1 & hasH & ~IncHiLow
lab=['>=',num2str(Ag(j))];
end
y1=y0+h;
handles(end+1)=fill([x0 x1 x1 x0],[y0+dy y0+dy y1 y1],cor{j});
handles(end+1)=text(x1+L/4,(y0+dy+y1)/2,lab,'VerticalAlignment','middle','fontsize',8);
y0=y1;
end
end
% title and legend label:
x=mean([-g*rs,g*rl]);
y=mean([g+ri,g*rs]);
handles(end+1)=text(x,y,titStr,'HorizontalAlignment','center');
x=x0;
y=y1+dy;
handles(end+1)=text(x,y,legStr,'HorizontalAlignment','left','VerticalAlignment','bottom');
if onAxes
place_wr(onAxes,wrAx,onAxesX,onAxesY,onAxesR);
end
if nargout==1
varargout{1}=handles;
end
function place_wr(ax,ax2,x,y,width)
if nargin < 5
width=1/5;
end
uax=get(ax,'units');
pax=get(ax,'position');
set(ax,'units',uax)
axXlim=get(ax,'xlim');
axYlim=get(ax,'ylim');
x_ax2=pax(1)+pax(3)*(x-axXlim(1))/diff(axXlim);
y_ax2=pax(2)+pax(4)*(y-axYlim(1))/diff(axYlim);
pax2=get(ax2,'position');
width=pax(3)*width;
height=pax2(4)*width/pax2(3);
pax2=[x_ax2 y_ax2 width height];
if 1
% place at centre of the wr, not the bottom left corner:
ax2Xlim=get(ax2,'xlim');
ax2Ylim=get(ax2,'ylim');
dx=(0-ax2Xlim(1))/diff(ax2Xlim)*pax2(3);
dy=(0-ax2Ylim(1))/diff(ax2Ylim)*pax2(4);
x_ax2=x_ax2-dx;
y_ax2=y_ax2-dy;
pax2=[x_ax2 y_ax2 width height];
end
set(ax2,'position',pax2)
function cor = caxcolor(val,cax,cmap)
%CAXCOLOR Caxis color for value
% Find the color for a given value in a colormap.
%
% Syntax:
% COLOR = CAXCOLOR(VALUE,CAXIS,COLORMAP)
%
% Inputs:
% VALUE
% CAXIS Default is current caxis
% COLORMAP Default is current colormap
%
% Output:
% COLOR RGB color vector
%
% Example:
% figure
% pcolor(peaks)
% color=caxcolor(0);
% set(gcf,'color',color)
%
% MMA 28-5-2007, martinho@fis.ua.pt
% Department of Physics
% University of Aveiro, Portugal
if nargin < 3
cmap = get(gcf,'colormap');
end
if nargin < 2
cax = caxis;
end
n=size(cmap,1);
i= (val-cax(1))/diff(cax) * (n-1) +1;
a=i-floor(i);
i=floor(i);
i=min(i,n);
i=max(i,1);
if i==n
cor=cmap(n,:);
elseif i==1
cor=cmap(1,:);
else
cor=cmap(i,:)*(1-a) + cmap(i+1,:)*a;
end