Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MATLAB: Assign multiple colors to text in legend

I'm trying to color code text in a legend. (Since I'm trying to sort several plots into different categories, I can't just rely on the line colors in the legend.) I've managed to set the text color for the entire legend, but I can't manage to assign it line by line. Is this possible?

Code so far:

list={'Label 1','Label 2','Label 3'};
leg=legend(list);
set(leg,'Textcolor',[1 0 0])

sets the text color for the entire legend as red. I'd like to be able to make some red, and some black. I tried assigning the color array as an n x 3 matrix, but MATLAB doesn't like that very much. I also poked around the legend properties using get(leg), but I couldn't find anything else that seemed useful. Any suggestions?

like image 670
Doresoom Avatar asked Feb 03 '10 17:02

Doresoom


2 Answers

While the answers by yuk and gnovice are correct, I would like to point out a little-known and yet fully-documented fact that the legend function returns additional handles that correspond to the legend components. From the documentation of the legend function:

[legend_h, object_h, plot_h, text_strings] = legend(...) returns

  • legend_h — Handle of the legend axes
  • object_h — Handles of the line, patch, and text graphics objects used in the legend
  • plot_h — Handles of the lines and other objects used in the plot
  • text_strings — Cell array of the text strings used in the legend

These handles enable you to modify the properties of the respective objects.

like image 189
Yair Altman Avatar answered Nov 12 '22 14:11

Yair Altman


Here is the code:

legtxt=findobj(leg,'type','text');
set(legtxt(1),'color','k')

Just find out which legends correspond to which index.

like image 9
yuk Avatar answered Nov 12 '22 16:11

yuk