# Explicitly specifying line colors when plotting a matrix

493 views (last 30 days)

Show older comments

x = 1:3;

y = [1 2 3; 42 40 34];

plot(x,y,'Color', [0.5 0.5 0.5; 1 0 0])

produce an error:

Error using plot

Color value must be a 3 element numeric vector

Same with:

plot(x,y,'rg')

Error using plot

Error in color/linetype argument

This has bugged me for years, but I have circumvented it by unrolling the matrix into a number of vectors that I plot one at a time using whatever color I prefer. But is there no way to tell MATLAB (in a compact, readable form) what colors I would like it to use for whatever number of lines it will plot?

##### 1 Comment

ELTH
on 16 Aug 2016

You can make a for loop and specify each line's colour based on the RGB code:

x = 1:3;

y = [22 20 18; 32 30 24; 42 40 34];

figure

hold on

for k=1:size(y,1)

p(k)=plot(x,y(k,1:end),'LineWidth',2);

set(p(k),'Color',[(size(y,1)-k+1)/size(y,1) k/size(y,1) 0.1]);

end

### Accepted Answer

Kelly Kearney
on 10 Jan 2017

An alternative method would be to save the handles of the plotted data and set the colors via the array option of set. I find this method a lot less hassle than messing with ColorOrder and hold states:

x = 1:3;

y = [1 2 3; 42 40 34];

h = plot(x,y);

set(h, {'color'}, {[0.5 0.5 0.5]; [1 0 0]});

I often use the shortcut of using a colormap with num2cell to get the desired list of colors:

set(h, {'color'}, num2cell(jet(2),2));

##### 6 Comments

Simon Silge
on 26 Nov 2021

Edited: Simon Silge
on 26 Nov 2021

Since 2019 there is an easier way to do this by setting your own color order by using the colororder command.

x = 1:3;

y = [1 2 3; 42 40 34];

colororder([0 0 1; 0.5 0.6 0])

plot(x,y)

### More Answers (3)

Image Analyst
on 30 Oct 2011

In the help it says this:

"plot automatically chooses colors and line styles in the order specified by ColorOrder and LineStyleOrder properties of current axes. ColorOrder : m-by-3 matrix of RGB values

Colors to use for multiline plots. Defines the colors used by the plot and plot3 functions to color each line plotted. If you do not specify a line color with plot and plot3, these functions cycle through the ColorOrder property to obtain the color for each line plotted. To obtain the current ColorOrder, which might be set during startup, get the property value:

get(gca,'ColorOrder')

Note that if the axes NextPlot property is replace (the default), high-level functions like plot reset the ColorOrder property before determining the colors to use. If you want MATLAB to use a ColorOrder that is different from the default, set NextPlot to replacechildren. You can also specify your own default ColorOrder."

co = get(gca,'ColorOrder') % Initial

% Change to new colors.

set(gca, 'ColorOrder', [0.5 0.5 0.5; 1 0 0], 'NextPlot', 'replacechildren');

co = get(gca,'ColorOrder') % Verify it changed

% Now plot with changed colors.

x = 1:3;

y = [1 2 3; 42 40 34];

plot(x,y, 'LineWidth', 3);

The things I put in the set() command are especially important.

##### 6 Comments

Daniele Maddaluno
on 8 Dec 2017

Edited: Daniele Maddaluno
on 8 Dec 2017

I can solve your problem with something like this:

x = 1:5;

y = [x; x.^2; x.^3; x.^4; x.^5];

n = size(y, 1);

colors = hsv(n);

h = plot(x, y);

set(h, {'color'}, num2cell(colors, 2));

##### 2 Comments

Vivek Bhardwaj
on 14 Feb 2019

Joakim Wang Erlandsson
on 19 Sep 2018

##### 1 Comment

Jim Camp
on 4 Nov 2018

### See Also

### Products

### Community Treasure Hunt

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

Start Hunting!