Clear Filters
Clear Filters

how to generate colors for line plot

190 views (last 30 days)
Yu Li
Yu Li on 26 Nov 2018
Edited: Vencel Kozma on 5 Dec 2022
I have a set of lines to plot in one figure. the first line is experimental data so I want to plot with 'black', the result are simulation result, I would like to plot with different colors.
the problem is that, the number of these simulation result is not clear, some times, only 2, some times, about 10.
what I did before is to determine some customized color:
cm{1}='r';
cm{2}='b';
cm{3}='m';
then,
for j=1:1:length(P)
P_tmp=P{j};
plot(P_tmp(:,1),P_tmp(:,2),['-',cm{j}]);
hold on
end
however, the color names to determine cm is limited, when number of plot are large, I do not have enough color names to customize parameter 'cm'.
is there any way to solve this problem?
Thanks!
Yu

Answers (2)

Jim David
Jim David on 26 Nov 2018
Different colors for an indefinite number of plots can be achieved by using the rand function to set the RGB values for the color for the plot. Here is an example that demonstrates how this can be done.
x = linspace(0,10,150);
y = cos(5*x);
figure
hold on
for i = 1:10
y = i*cos(i*x);
plot(x,y,'Color',[rand,rand,rand])
end
hold off
A further point of interest could be MATLAB's default ColorOrder. Here is the documentation for the same:
This could be used in conjunction with the rand function to increase the number of colors MATLAB cycles through.

Vencel Kozma
Vencel Kozma on 5 Dec 2022
Edited: Vencel Kozma on 5 Dec 2022
I also tried this, a deterministic way to create colour. That being said, the number of colours is limited:
Colmat = hsv(); % hsv---> Colourmap, which has a wide range of colours.
figure()
for k = 1:length(Data)
Colour = Colmat( mod(7*(k-1), 64)+1, :)... ---> Colour
*(0.9-0.3*( mod(floor(7*(k-1)/64), 3) )) % --->Brightness
% Insert plot here!
end

Categories

Find more on Colormaps 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!