Estoy tratando de hacer una leyenda en matlab la figura que ocupa menos espacio, en particular el tamaño vertical. Idealmente, si yo pudiera cambiar el inter-espaciado de línea de la leyenda, este habría resuelto, pero me parece que no puede encontrar una manera de hacerlo.

He buscado en todo en Mathworks preguntas y Google. Incluso he tratado de «escribir» desde el principio de la leyenda, pero no funciona cuando intento exportar a eps.

Hay una forma de control de la inter-espaciado de línea en Matlab de la leyenda? algo indocumentados tal vez?

InformationsquelleAutor | 2013-11-29

1 Comentario

  1. 1

    Una forma sería la de ajustar la relación de aspecto de la leyenda:

    set(h,'PlotBoxAspectRatioMode','manual');
    set(h,'PlotBoxAspectRatio',[1 0.8 1]);

    (El valor predeterminado es [1 1 1]).

    También se puede jugar con la posición exacta de los diversos elementos de leyenda. Si h es el identificador de su leyenda:

    hc = get(h,'Children');

    Ahora, hc será de longitud 3 x el número de artículos en su leyenda.

    hc(1) es el marcador, hc(2) es la línea, hc(3) es el texto.

    (y así sucesivamente para posteriores artículos).

    hc(1) tendrá una entrada YData(posición vertical, el único valor), hc(2) también ha YData (posición vertical – vector de dos valores idénticos), y hc(3) contiene Position[x y z] vector. Los valores de Y para todos estos tres deben ser las mismas.

    Obtener la y-posiciones:

    yd = zeros(length(hc)/3,1);
    for n = 1:length(yd);
      yd(n) = get(hc(1+(n-1)*3),'YData');
    end

    Asumiendo que su leyenda no tiene ningún texto que va a lo largo de más de una línea,yd deben estar espaciados uniformemente pasos. Definir una nueva separación de su elección, yd2.

    Establecer nuevas posiciones:

    % markers
    for n = 1:length(yd2)
       set(hc(1+(n-1)*3),'YData',yd2(n));
    end
    
    % lines
    for n = 1:3
       set(hc(2+(n-1)*3),'YData',[yd2(n),yd2(n)]);
    end
    
    % text
    
    for n = 1:3;
        pos = get(hc(3+(n-1)*3),'Position');
        pos(2) = yd(n);
        set(hc(3+(n-1)*3),'Position',pos);
    end

    Problema – esto cambia todo el texto y marcadores, pero no cambia el cuadro de borde. La forma más fácil si tratando de hacer ajustes finos es primero definir el tamaño final y la posición de la leyenda y, a continuación, reposicionar/cambiar el tamaño de los elementos dentro de a gusto.

    También, usted puede encontrar que cuando la escritura de imágenes de MATLAB amablemente se redibuja la imagen, restablecer sus ajustes. Ver este blog Indocumentados MATLAB para información sobre eso.

Dejar respuesta

Please enter your comment!
Please enter your name here