2010-02-03 13 views
9

Próbuję kolorować tekst kodu w legendzie. (Ponieważ staram się posortować kilka wątków na różne kategorie, nie mogę polegać tylko na kolorach linii w legendzie.) Udało mi się ustawić kolor tekstu dla całej legendy, ale nie potrafię przypisz go linia po linii. czy to możliwe?MATLAB: Przypisywanie wielu kolorów do tekstu w legendzie

kod do tej pory:

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

ustawia kolor tekstu dla całej legendy jako czerwony. Chciałbym móc zrobić trochę czerwonego, a trochę czarnego. Próbowałem przypisać tablicę kolorów jako macierz n x 3, ale MATLAB tego nie lubi. Sprawdziłem również właściwości legendy przy użyciu get(leg), ale nie mogłem znaleźć niczego, co wydawałoby się przydatne. Jakieś sugestie?

Odpowiedz

9

Oto kod:

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

Wystarczy dowiedzieć się, które odpowiadają legendy, które indeksu.

8

Aby indywidualnie zmienić kolory tekstu legendy, należy najpierw uzyskać uchwyty obiektów tekstowych, będących obiektami podrzędnymi obiektu legendy. Następnie możesz zmienić kolory tekstu osobno. Oto przykład tego, jak można to zrobić:

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 

Zauważ, że kolejność kolorów w ostatnim wierszu jest niebieski następnie czerwony, w odwrotnej kolejności drodze etykiety są przekazywane do funkcji legend. Powyższe daje następujące działki:

enter image description here

12

Podczas odpowiedzi przez Fuj i gnovice są poprawne, chciałbym zwrócić uwagę na mało znany, a jednak w pełni udokumentowany fakt, że legenda zwraca dodatkowe uchwyty, które odpowiadają elementów legendy. Z dokumentacji legenda funkcję:

[legend_h, object_h, plot_h, text_strings] = legenda (...) zwraca

  • legend_h - Uchwyt legendy osi
  • object_h - Uchwyty linii, łaty i obiektów graficznych użytych w legendzie
  • działka_h - Uchwyty linii i innych obiektów użytych w działce
  • text_strings - Tablica tekstowa ciągów tekstowych używanych w legendzie

Te uchwyty umożliwiają modyfikowanie właściwości poszczególnych obiektów.

+0

Dzięki za wskazanie tego! Sądzę, że następnym razem powinienem uważniej przeczytać dokumentację. – Doresoom

+1

Dobry połów, Yair. To nauczy mnie * całkowicie * czytać aktualną dokumentację zamiast odpowiadać z pamięci. ;) – gnovice

Powiązane problemy