2010-08-10 16 views
7

tengo la siguiente secuencia de comandos para trazar en última instancia, un 4 por 2 subtrama:MATLAB título trama secundaria y etiquetas de los ejes

files = getAllFiles('preliminaries'); 

n = size(files); 
cases = cell(1, n); 
m = cell(1, n); 

for i = 1:1:n 
    S = load(files{i}); 

    cases{i} = retransmission_distribution(S); 

    c = size(cases{i}); 
    m{1,i} = cell(1, c(2)); 

    %figure(i); 
    str_size = size(files{i}); 
    title_str = files{i}(5:str_size(2) - 4); 
    title_str = strrep(title_str, '_', ' '); 
    %title(title_str); 
    for j = 1:1:c(2) 
     [x, y] = hist(cases{i}{1,j}); 
     m{1,i}{1,j} = [x; int32(y)]; 
     % subplot(4, 2, j); 
     % xlabel('Number of Retransmissions'); 
     % ylabel('Number of Occurrences'); 
     % bar(y, x, 'histc'); 
    end 
end 

Sin embargo, con el actual orden de secuencia de comandos que tengo, incluso con los comentarios, el título y Las etiquetas de ejes estuvieron presentes por un tiempo antes de borrarse. Quiero que la figura tenga su propio título, con cada subtrama teniendo sus propias etiquetas de eje. ¿Cuál es la forma más fácil de solucionarlo?

Respuesta

8

Para las etiquetas de los ejes, Matt is correct sobre las cuales hay que colocar después de la llamada al BAR. Eso se ocupará de un problema de la etiqueta del eje. Sin embargo, es probable que note que sus etiquetas del eje y, en particular, pueden terminar escritas una sobre otra si son demasiado largas. Tienes un par de opciones para arreglar esto. En primer lugar, se puede ajustar el tamaño de fuente en su llamada a YLABEL:

ylabel('Number of Occurrences','FontSize',7); 

En segundo lugar, puede convertir una etiqueta larga en una etiqueta de varias líneas utilizando un cell array of strings en lugar de sólo una única cadena:

ylabel({'Number of' 'Occurrences'}); 

Para agregar un título a la figura completa, la mejor opción es probablemente hacer un objeto de texto estático UICONTROL y ajustar su posición para que se coloque cerca de la parte superior de la figura. Se puede obtener el tamaño y la posición de la figura primero para ayudarle a colocar el cuadro de texto cerca de la parte superior central y:

figureSize = get(gcf,'Position'); 
uicontrol('Style','text',... 
      'String','My title',... 
      'Position',[(figureSize(3)-100)/2 figureSize(4)-25 100 25],... 
      'BackgroundColor',get(gcf,'Color')); 

Esto creará un cuadro de texto estático de ancho de 100 píxeles y la altura de 25 píxeles colocados en el centro de la parte superior de la figura y con el mismo color de fondo que la figura.

+1

No sabía nada de la etiqueta multilínea. ¡Ordenado! – Jonas

+0

Me gusta el uso de UICONTROL para el título. FYI parece que no aparece en la película cuando se usa MPGWRITE v6.0 (Matlab 2012a). –

2

Hasta donde yo sé, la función de título coloca el texto relativo a un conjunto de ejes, por lo que no existe el título de una figura. Las posibles soluciones incluyen usar el título para una subtrama bien ubicada solamente (como la primera, o la del medio de la fila superior) o crear manualmente un conjunto de ejes en la ubicación donde desea su título.

En cuanto a las etiquetas del eje, intente poner los comandos de la etiqueta después del comando de la barra.

4

Aquí hay una solución que vi en un foro de intercambio de MATLAB hace un tiempo y que me funcionó bastante bien. Después de crear la figura, ejecutar la siguiente secuencia de comandos:

set(gcf,'NextPlot','add'); 
axes; 
h = title('Intended Figure Title'); 
set(gca,'Visible','off'); 
set(h,'Visible','on'); 
+0

Esta es la única opción remotamente sensata que he visto, y todavía me deja ir "En algo que está diseñado para ser un lenguaje científico, y se usa ampliamente para trazar gráficos, ¿POR QUÉ ES TAN DIFÍCIL?" ;-) – Flyto

4

suptitle es lo que busca.

Coloca el título centrado sobre todos los trazados.

SUPTITLE Puts a title above all subplots. 
    SUPTITLE('text') adds text to the top of the figure 
    above all subplots (a "super title"). Use this function 
    after all subplot commands. 
+1

+1 El título que usa esta solución aparece en las películas creadas con MPGWRITE. –

+4

Tenga en cuenta que el comando suptitle * no * está incluido en la base de datos matlab. Creo que es parte de una caja de herramientas que no tengo. – Flyto

Cuestiones relacionadas