Estoy trazando algunos datos con MATLAB y me gustaría ajustar la distancia entre las etiquetas del eje y el eje de la misma. Sin embargo, basta con añadir un poco a la «Posición» de propiedad de la etiqueta hace que la etiqueta mover fuera de la figura de la ventana. Existe un «margen» de la propiedad o algo similar?

La distancia entre la etiqueta en el eje y eje en MATLAB figura

En la figura de arriba, me gustaría aumentar la distancia entre los números y la etiqueta «Tiempo (s)», mientras que de forma automática ampliar las cifras tamaño, por lo que la etiqueta no se mueve fuera de los límites.

Esto es cómo puedo configurar la figura /eje.

figure;
set(gca, ...
    'Box'         , 'off'                        , ...
    'LooseInset'  , get(gca, 'TightInset') * 1.5 , ...
    'TickDir'     , 'in'                         , ...
    'XMinorTick'  , 'off'                        , ...
    'YMinorTick'  , 'off'                        , ...
    'TickLength'  , [.02 .02]                    , ...
    'LineWidth'   , 1                            , ...
    'XGrid'       , 'off'                        , ...
    'YGrid'       , 'off'                        , ...
    'FontSize'    , 18                           );

OriginalEl autor Niko | 2013-02-19

3 Comentarios

  1. 8

    Escribí una función que debe hacer exactamente lo que quieres. Mantiene los ejes en exactamente el mismo tamaño y posición, se mueve el x-etiqueta hacia abajo y aumenta el tamaño de la figura que ser lo suficientemente grande para mostrar la etiqueta:

    function moveLabel(ax,offset,hFig,hAxes)
    % get figure position
    posFig = get(hFig,'Position');
    % get axes position in pixels
    set(hAxes,'Units','pixels')
    posAx = get(hAxes,'Position');
    % get label position in pixels
    if ax=='x'
    set(get(hAxes,'XLabel'),'Units','pixels')
    posLabel = get(get(hAxes,'XLabel'),'Position');
    else
    set(get(hAxes,'YLabel'),'Units','pixels')
    posLabel = get(get(hAxes,'YLabel'),'Position');
    end
    % resize figure
    if ax=='x'
    posFigNew = posFig + [0 -offset 0 offset];
    else
    posFigNew = posFig + [-offset 0 offset 0];
    end
    set(hFig,'Position',posFigNew)
    % move axes
    if ax=='x'
    set(hAxes,'Position',posAx+[0 offset 0 0])
    else
    set(hAxes,'Position',posAx+[offset 0 0 0])
    end
    % move label
    if ax=='x'
    set(get(hAxes,'XLabel'),'Position',posLabel+[0 -offset 0])
    else
    set(get(hAxes,'YLabel'),'Position',posLabel+[-offset 0 0])
    end
    % set units back to 'normalized' and 'data'
    set(hAxes,'Units','normalized')
    if ax=='x'
    set(get(hAxes,'XLabel'),'Units','data')
    else
    set(get(hAxes,'YLabel'),'Units','data')
    end
    end

    En este caso offset debe ser la máxima de desplazamiento en píxeles. Si desea relativa de las compensaciones, creo que esta función podría fácilmente ser reescrito. hFig es la figura de la manija y hAxes los ejes de la manija.

    EDICIÓN: crear la figura de usar hFig = figure; y los ejes hAxes = axes; (a continuación, configurar los ejes como se hizo en la pregunta: set(hAxes,...)) antes de llamar a la función.

    EDIT2: se ha añadido las líneas donde el 'Units' de hAxes y la XLabel se cambió a ‘normalizado’ y ‘datos’, respectivamente. De esa manera la figura estancias de la manera que usted desea después de cambiar el tamaño.

    EDIT3: modificada la función de trabajo para ambos X e y etiquetas. De entrada adicional ax debe ser 'x' o 'y'.

    ¿Hay alguna diferencia notable a la hora de abordar el eje y? Supongo que la trama en sí de alguna manera necesita ser movido en ese caso, ¿verdad?
    Creo que el código es bastante fácilmente convertido a trabajar en el eje de las y. Estoy en un autobús, así que no puedo hacerlo ahora, pero la voy a ver más tarde esta noche (dentro de un par de horas)
    Por alguna razón, este método falla, por ejemplo, de más de 50 píxeles de desplazamiento en el eje x. En mi configuración, la etiqueta, a continuación, cortar por la mitad. Sin embargo, en el rango deseado de un par de píxeles de esta función funciona como un encanto, así que muchas gracias!
    Extraña.. voy a tratar de echar un vistazo a él más tarde, cuando tengo algo de tiempo. Pero me alegro de que funciona para qué la necesitas!

    OriginalEl autor ThijsW

  2. 8

    Esto se puede lograr mediante el ajuste de la posición del eje de un xlabel. Yo también sugieren el uso de «normalizar» las unidades por lo que su posicionamiento no depende del rango de datos. He aquí un ejemplo:

    figure
    plot(rand(1,10))
    set(gca, 'Units', 'Normalized');
    pos = get(gca, 'Position');
    offset = 0.1;
    set(gca, ...
        'Box'         , 'off'                        , ...
        'LooseInset'  , get(gca, 'TightInset') * 1.5 , ...
        'TickDir'     , 'in'                         , ...
        'XMinorTick'  , 'off'                        , ...
        'YMinorTick'  , 'off'                        , ...
        'TickLength'  , [.02 .02]                    , ...
        'LineWidth'   , 1                            , ...
        'XGrid'       , 'off'                        , ...
        'YGrid'       , 'off'                        , ...
        'FontSize'    , 18                           , ...
        'Position'    , pos + [0, offset, 0, -offset]);
    h = xlabel('Time (s)');
    set(h, 'Units', 'Normalized');
    pos = get(h, 'Position');
    set(h, 'Position', pos + [0, -offset, 0]);
    Este parece ser un buen método, gracias. Sin embargo, si he de poner offset = 0.01;, la etiqueta se coloca en la figura de la frontera y, por tanto, cortar por la mitad.
    Eso es cierto. Tendrás que jugar para obtener un buen valor para el desplazamiento. Usted también puede querer un desplazamiento diferente para el eje y xlabel.
    Las 4 últimas líneas de este eran todo lo que sea necesario para ajustar la posición de las etiquetas.

    OriginalEl autor shoelzer

  3. 4

    Sé que esto ha sido contestada y a todos, pero esto es (en cierta medida) de una manera más sencilla:

    relative_offset = 1.5;
    close all;
    figure(99);clf
    plot(rand(1,10))
    xlabel('The x-axis')
    xh = get(gca,'XLabel'); % Handle of the x label
    pause(0.2)
    set(xh, 'Units', 'Normalized')
    pause(0.2)
    pos = get(xh, 'Position');
    set(xh, 'Position',pos.*[1,relative_offset,1])

    He incluido los comandos de pausa, ya que mi sistema se consigue delante de sí mismo en un extraño camino, de lo contrario.

    /Niels

    OriginalEl autor Clausen

Dejar respuesta

Please enter your comment!
Please enter your name here