function ColorSet=varycolor(NumberOfPlots)
% VARYCOLOR Produces colors with maximum variation on plots with multiple
% lines.
%
% VARYCOLOR(X) returns a matrix of dimension X by 3. The matrix may be
% used in conjunction with the plot command option 'color' to vary the
% color of lines.
%
% Yellow and White colors were not used because of their poor
% translation to presentations.
%
% Example Usage:
% NumberOfPlots=50;
%
% ColorSet=varycolor(NumberOfPlots);
%
% figure
% hold on;
%
% for m=1:NumberOfPlots
% plot(ones(20,1)*m,'Color',ColorSet(m,:))
% end
%Created by Daniel Helmick 8/12/2008
error(nargchk(1,1,nargin))%correct number of input arguements??
error(nargoutchk(0, 1, nargout))%correct number of output arguements??
%Take care of the anomolies
if NumberOfPlots<1
ColorSet=[];
elseif NumberOfPlots==1
ColorSet=[0 1 0];
elseif NumberOfPlots==2
ColorSet=[0 1 0; 0 1 1];
elseif NumberOfPlots==3
ColorSet=[0 1 0; 0 1 1; 0 0 1];
elseif NumberOfPlots==4
ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1];
elseif NumberOfPlots==5
ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 0 0];
elseif NumberOfPlots==6
ColorSet=[0 1 0; 0 1 1; 0 0 1; 1 0 1; 1 0 0; 0 0 0];
else %default and where this function has an actual advantage
%we have 5 segments to distribute the plots
EachSec=floor(NumberOfPlots/5);
%how many extra lines are there?
ExtraPlots=mod(NumberOfPlots,5);
%initialize our vector
ColorSet=zeros(NumberOfPlots,3);
%This is to deal with the extra plots that don't fit nicely into the
%segments
Adjust=zeros(1,5);
for m=1:ExtraPlots
Adjust(m)=1;
end
SecOne =EachSec+Adjust(1);
SecTwo =EachSec+Adjust(2);
SecThree =EachSec+Adjust(3);
SecFour =EachSec+Adjust(4);
SecFive =EachSec;
for m=1:SecOne
ColorSet(m,:)=[0 1 (m-1)/(SecOne-1)];
end
for m=1:SecTwo
ColorSet(m+SecOne,:)=[0 (SecTwo-m)/(SecTwo) 1];
end
for m=1:SecThree
ColorSet(m+SecOne+SecTwo,:)=[(m)/(SecThree) 0 1];
end
for m=1:SecFour
ColorSet(m+SecOne+SecTwo+SecThree,:)=[1 0 (SecFour-m)/(SecFour)];
end
for m=1:SecFive
ColorSet(m+SecOne+SecTwo+SecThree+SecFour,:)=[(SecFive-m)/(SecFive) 0 0];
end
end |