2010-02-03 14 views
9

Sto provando a colorare il testo del codice in una legenda. (Dato che sto cercando di ordinare diversi grafici in diverse categorie, non posso semplicemente fare affidamento sui colori della linea nella legenda.) Sono riuscito a impostare il colore del testo per l'intera legenda, ma non riesco a assegnarlo linea per linea. È possibile?MATLAB: Assegna più colori al testo nella legenda

Codice finora:

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

imposta il colore del testo per l'intera leggenda in rosso. Mi piacerebbe essere in grado di fare un po 'di rosso e un po' di nero. Ho provato ad assegnare l'array di colori come una matrice n x 3, ma a MATLAB non piace molto. Ho anche analizzato le proprietà della legenda usando get(leg), ma non sono riuscito a trovare altro che mi sembrasse utile. Eventuali suggerimenti?

risposta

9

Ecco il codice:

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

Basta scoprire quali leggende corrispondono a quale indice.

8

Per modificare i colori del testo della legenda singolarmente, è necessario innanzitutto ottenere gli handle degli oggetti di testo, che sono figli dell'oggetto della legenda. Quindi puoi cambiare i loro colori del testo separatamente. Ecco un esempio di come si può fare:

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 

Si noti che l'ordine dei colori nella ultima riga è blu allora rosso, in ordine inverso del modo in cui le etichette sono passati alla funzione legend. Quanto sopra vi darà la trama segue:

enter image description here

12

Mentre le risposte di yuk e gnovice sono corretti, vorrei sottolineare un fatto poco noto e ancora pienamente documentato che il leggenda funzione ritorna maniglie supplementari che corrispondono ai componenti leggenda. Dalla documentazione del funzione di leggenda:

[legend_h, object_h, plot_h, text_strings] = leggenda (...) restituisce

  • legend_h - Maniglia della leggenda assi
  • object_h - Maniglie della linea, della patch e degli oggetti grafici di testo utilizzati nella legenda
  • plot_h - Maniglie delle linee e degli altri oggetti utilizzati nella trama
  • text_strings - di matrice di celle delle stringhe di testo utilizzati nella leggenda

Queste maniglie consentono di modificare le proprietà dei rispettivi oggetti.

+0

Grazie per averlo fatto notare! Credo che dovrei leggere il file di documentazione più da vicino la prossima volta. – Doresoom

+1

Buona cattura, Yair. Questo mi insegnerà a * completamente * leggere la documentazione corrente invece di rispondere dalla memoria. ;) – gnovice