21

I have 6 vectors which I want to plot. How I can make each plot with different color (random)? With the code below, the plot limited to one color for all six vectors.

plot(x,y,'-rs','LineWidth',1,...
      'MarkerEdgeColor','k',...
      'MarkerFaceColor','g',...
      'MarkerSize',5);
Jessy
  • 15,321
  • 31
  • 83
  • 100
  • possible duplicate of [Automatically plot different colored lines in MATLAB](http://stackoverflow.com/questions/2028818/automatically-plot-different-colored-lines-in-matlab) – gnovice Jul 12 '10 at 03:56

2 Answers2

43

You can have PLOT automatically choose line colors for you. If all 6 of your vectors are the same length, you can put the x and y coordinates into N-by-6 matrices X and Y and pass these to PLOT. A different color will be used for each column:

plot(X,Y,'-s');  %# Plots lines with square markers

You could also use some of the built-in colormaps to generate a set of colors, then use these when you plot each line separately. For example:

cmap = hsv(6);  %# Creates a 6-by-3 set of colors from the HSV colormap
for i = 1:6     %# Loop 6 times
  plot(X(:,i),Y(:,i),'-s','Color',cmap(i,:));  %# Plot each column with a
                                               %#   different color
end
gnovice
  • 125,304
  • 15
  • 256
  • 359
  • thank you very much. I wonder if I have e.g. 21 different vectors, can I change the cmap = hsv(6) to cmap = hsv(21) – Jessy Jul 12 '10 at 01:19
  • @Jessy: Yes, `hsv(N)` will return an N-by-3 color map with one RGB color per row. – gnovice Jul 12 '10 at 01:44
  • 2
    +1 for using colormaps. I've found that purely random colors perform very poorly for display purposes - the contrast between colors is often insufficient and the colors too light or too dark. Sampling evenly along one of the standard color maps gives much more pleasant and readable color combinations. – Kena Jul 12 '10 at 13:18
  • 1
    In case random colors really are desired you can change the loop into: for i = randperm(6) – Dennis Jaheruddin Oct 15 '12 at 11:53
  • "lines" colormap produces more darker colors. – John Smith Feb 13 '13 at 21:36
  • This answer deserves so many more upvotes. The question has 17K views and the answer only 12 miserable upvotes, including mine. – Wok Feb 14 '13 at 16:29
4

To create a random color map, you could do the following

myMap = rand(nbColors, 3);
for i = 1:nbColors
  plot(X(:,i),Y(:,i),'-s','Color',myMap(i,:));
end

However, as I stated in my comment to gnovice's answer, picking colors out of a colormap generally provides much more readable color combinations.

Kena
  • 6,891
  • 5
  • 35
  • 46