MATLAB: назначить несколько цветов для текста в легенде - PullRequest
9 голосов
/ 03 февраля 2010

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

Код пока:

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

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

Ответы [ 3 ]

12 голосов
/ 04 февраля 2010

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

[legend_h, object_h, plot_h, text_strings] = legend (...) возвращает

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

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

9 голосов
/ 03 февраля 2010

Вот код:

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

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

8 голосов
/ 03 февраля 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. Выше приведен следующий сюжет:

enter image description here

...