9

我正在尝试为图例中的文本着色。(因为我试图将几个图分类为不同的类别,所以我不能只依赖图例中的线条颜色。)我已经设法为整个图例设置了文本颜色,但我无法做到逐行分配。这可能吗?

到目前为止的代码:

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

将整个图例的文本颜色设置为红色。我希望能够制作一些红色和一些黑色。我尝试将颜色数组分配为 nx 3 矩阵,但 MATLAB 不太喜欢这样。我还使用 探索了图例属性get(leg),但我找不到任何其他似乎有用的东西。有什么建议么?

4

3 回答 3

12

虽然 yuk 和 gnovice 的答案是正确的,但我想指出一个鲜为人知但有充分记录的事实,即legend函数返回与图例组件相对应的附加句柄。从图例函数的文档中:

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

  • legend_h - 图例轴的句柄
  • object_h - 图例中使用的线条、补丁和文本图形对象的句柄
  • plot_h - 绘图中使用的线条和其他对象的句柄
  • text_strings - 图例中使用的文本字符串的元胞数组

这些句柄使您能够修改相应对象的属性。

于 2010-02-03T22:22:42.657 回答
9

这是代码:

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

只需找出哪些图例对应于哪个索引。

于 2010-02-03T18:03:17.977 回答
8

要单独更改图例文本颜色,您必须首先获取文本对象的句柄,它们是图例对象的子对象。然后您可以单独更改它们的文本颜色。这是一个如何做到这一点的示例:

plot(1:10, rand(1, 10), 'r');       % Plot a random line in red
hold on;
plot(1:10, rand(1, 10), 'b');       % Plot a random line in blue
hLegend = legend('a', 'b');         % Create the legend
hKids = get(hLegend, 'Children');   % Get the legend children
hText = hKids(strcmp(get(hKids, 'Type'), 'text'));  % Select the legend children
                                                    %    of type 'text'
set(hText, {'Color'}, {'b'; 'r'});  % Set the colors

请注意,最后一行中的颜色顺序是先蓝legend红,与将标签传递给函数的顺序相反。以上将为您提供以下情节:

在此处输入图像描述

于 2010-02-03T18:02:45.747 回答