2010-02-03 14 views
9

Estoy intentando colorear el texto del código en una leyenda. (Debido a que estoy tratando de ordenar varias parcelas en diferentes categorías, no puedo confiar únicamente en los colores de línea de la leyenda). He logrado establecer el color del texto para toda la leyenda, pero no puedo asignarlo línea por línea. es posible?MATLAB: asignar varios colores al texto en la leyenda

Código hasta el momento:

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

establece el color de texto para toda la leyenda como el rojo. Me gustaría poder hacer algo de rojo y algo de negro. Intenté asignar la matriz de colores como una matriz n x 3, pero a MATLAB no le gusta mucho. También busqué las propiedades de la leyenda usando get(leg), pero no pude encontrar nada más que me pareciera útil. ¿Alguna sugerencia?

Respuesta

9

Aquí está el código:

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

Sólo averiguar qué leyendas corresponden a qué índice.

8

Para cambiar los colores del texto de la leyenda individualmente, primero debe obtener los identificadores de los objetos de texto, que son elementos secundarios del objeto de la leyenda. Luego puede cambiar sus colores de texto por separado. Aquí está un ejemplo de cómo puede hacerlo:

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 

Tenga en cuenta que el orden de los colores en la última línea es de color azul continuación rojo, en el orden inverso de la forma en que las etiquetas se pasan a la función legend. Lo anterior le dará el siguiente diagrama:

enter image description here

12

Mientras que las respuestas de puaj y gnovice son correctas, me gustaría señalar un hecho poco conocido y sin embargo totalmente documentado que el leyenda función vuelve mangos adicionales que corresponden a los componentes de leyenda. A partir de la documentación de la leyenda función:

[legend_h, object_h, plot_h, text_strings] = leyenda (...) devuelve

  • legend_h - Mango de la leyenda ejes
  • object_h - Manijas de los objetos de línea, parche y gráficos de texto utilizados en la leyenda
  • plot_h - Manijas de las líneas y otros objetos utilizados en la trama
  • text_strings - matriz de células de las cadenas de texto utilizados en la leyenda

Estas asas le permiten modificar las propiedades de los objetos respectivos.

+0

¡Gracias por señalar eso! Creo que debería leer el archivo de documentación más de cerca la próxima vez. – Doresoom

+1

Buena captura, Yair. Eso me enseñará a * leer * completamente la documentación actual en lugar de responder de memoria. ;) – gnovice

Cuestiones relacionadas