How can I give different colours not randomly to large number of lines in one plot?

1 view (last 30 days)
The syntax in the code col=['r' 'y' 'b' 'g' 'k' 'c' 'm' 'k' '#D95319']; is related to the color of the lines in the plot which works well for 9 lines in the plot. But actually I want to plot 20 lines. How can I write this syntax for large number of colors? In fact, I don't want to give them random colors but in order.
clc
clear all
load EC.mat
for n=4:1:9;
filename = sprintf('data_%d.mat',n);
load(filename)
E(n-3,:)=EC(1,:);
d(n-3,:)=dep(9,:);
end
hold on ; % MOVE THIS OUTSIDE THE LOOP
col=['r' 'y' 'b' 'g' 'k' 'c' 'm' 'k' '#D95319']; % MOVE THIS OUTSIDE THE LOOP
[m,~]=size(d);
lineHandles = gobjects(1,m); % ADD THIS
for i=1:m
PP(i,:)=plot(d(i,:),E(i,:),'ok','LineWidth',2)% original data
P1(i,:) = polyfit(d(i,:),E(i,:),2);%%2 indicates the quadratic
% x_values = min(in_(1,:)): 0.001:max(x_axis(1,:));
Y= polyval(P1(i,:),d(i,:));
h1 = plot(d(i,:),Y,'*g','LineWidth',1) % fitted
Y1 = polyval(P1(i,:),d(i,:));
R1 = corrcoef(Y1,d(i,:));
%%lsline
ss = min(d(i,:)) : 0.001: max(d(i,:));
Y2 = polyval(P1(i,:),ss);
lineHandles(i) = plot(ss,Y2,'color',col(i),'LineWidth',1); % STORE HANDLE
end
% MOVE THIS OUTSIDE THE LOOP
title('Polynomial fitting','FontSize',16,'FontWeight','normal')
xlabel('Depolarisation ratio \delta_{in}','FontSize',12,'FontWeight','normal');
ylabel('Extinction coefficient \alpha{(m^-^1)}','FontSize',12,'FontWeight','normal');
ylim([0.005 0.03])
% SUPPLY HANDLES, DEFINE EACH POLY CURVE LINE
legend([PP(end,:), h1, lineHandles],...
["Actual data","Data fit",compose('PolyCurve %d\\mum',(4:m+7))],'location','Northwest')
  1 Comment
Walter Roberson
Walter Roberson on 10 Feb 2021
Edited: Walter Roberson on 10 Feb 2021
col=['r' 'y' 'b' 'g' 'k' 'c' 'm' 'k' '#D95319']; % MOVE THIS OUTSIDE THE LOOP
needs to be either
col={'r' 'y' 'b' 'g' 'k' 'c' 'm' 'k' '#D95319'}; % MOVE THIS OUTSIDE THE LOOP
or
col=["r" "y" "b" "g" "k" "c" "m" "k" "#D95319"]; % MOVE THIS OUTSIDE THE LOOP
If you use the {} form then you need to use col{i} instead of col(i)

Sign in to comment.

Answers (1)

Iuliu Ardelean
Iuliu Ardelean on 10 Feb 2021
Edited: Iuliu Ardelean on 10 Feb 2021
Let's say you have 7 colours:
x = rand(7, 100);
y = rand(7, 100);
col = parula(7); % replace col=['r', 'y', 'b'] with col=parula(ColoursNumber)
figure
hold on
for i = 1:7
plot(x(i,:),y(i,:), 'Color', col(i,:));
end
hold off
legend
If you don't like parula, you can try different ones from this list:
Image should look like this:

Categories

Find more on Debugging and Analysis in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!