MATLAB: назначьте несколько цветов тексту в легенде

Я пытаюсь раскрасить текст кода в легенде. (Поскольку я пытаюсь отсортировать несколько графиков по разным категориям, я не могу просто полагаться на цвета линий в легенде.) Мне удалось установить цвет текста для всей легенды, но я не могу назначьте его построчно. Это возможно?

Код пока:

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

устанавливает красный цвет текста для всей легенды. Я хотел бы иметь возможность сделать несколько красных и несколько черных. Я попытался назначить цветовой массив как матрицу n x 3, но MATLAB это не очень нравится. Я также порылся в свойствах легенды, используя get(leg), но не смог найти ничего более полезного. Какие-либо предложения?


person Doresoom    schedule 03.02.2010    source источник


Ответы (3)


Вот код:

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

Просто узнайте, какие легенды соответствуют какому индексу.

person yuk    schedule 03.02.2010

Хотя ответы yuk и gnovice верны, я хотел бы указать на малоизвестный, но полностью задокументированный факт, что функция legend возвращает дополнительные дескрипторы, соответствующие Компоненты легенды. Из документации функции legend:

[legend_h, object_h, plot_h, text_strings] = легенда (...) возвращает

  • legend_h — Ручка осей легенды
  • object_h — дескрипторы линии, патча и текстовых графических объектов, используемых в легенде.
  • plot_h — Дескрипторы линий и других объектов, используемых в графике
  • text_strings — Массив ячеек текстовых строк, используемых в легенде

Эти дескрипторы позволяют изменять свойства соответствующих объектов.

person Yair Altman    schedule 03.02.2010
comment
Спасибо что подметил это! Думаю, в следующий раз мне следует более внимательно прочитать файл документации. - person Doresoom; 04.02.2010
comment
Хороший улов, Яир. Это научит меня полностью читать текущую документацию, а не отвечать по памяти. ;) - person gnovice; 04.02.2010

Чтобы изменить цвета текста легенды по отдельности, вы должны сначала получить дескрипторы текстовых объектов, которые являются дочерними элементами объекта легенды. Затем вы можете изменить их цвета текста отдельно. Вот пример того, как вы можете это сделать:

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. Вышеизложенное даст вам следующий сюжет:

введите здесь описание изображения

person gnovice    schedule 03.02.2010