2009-11-19 98 views
28

¿Hay alguna manera de invertir el eje y en las gráficas de matlab, de modo que la dirección positiva del eje y, en lugar de hacia arriba, apunte hacia abajo?Volteando el eje y al revés en MATLAB

(lo ruego, por favor no decir, imprimirlo, luego gire el papel alrededor ;-)

+0

@Rook Por favor, tenga en cuenta la respuesta de Ejo60, que creo que es la mejor respuesta aquí ahora. –

Respuesta

53

El 'YDir' axes property puede ser 'normal' o 'reverse'. Por defecto es 'normal' para la mayoría de los trazados, pero algunos trazados lo cambiarán automáticamente a 'reverse', como las funciones image o imagesc.

Puede establecer la dirección del eje y de un eje, ya sea con la función set o la indexación de puntos (en las versiones más recientes de MATLAB):

h = gca; % Handle to currently active axes 
set(h, 'YDir', 'reverse'); 
% or... 
h.YDir = 'reverse'; 

Estoy sorprendido por algunas de las otras respuestas diciendo que la 'YDir' propiedad de alguna manera ha desaparecido o está dando un error. No he visto ningún tipo de comportamiento en las versiones de MATLAB a partir de 2013, 2014 o 2016. Sólo hay dos posibles dificultades que me encontré:

  • La propiedad no se puede ajustar con una serie de células, sólo se una cadena de caracteres:

    >> set(gca, 'YDir', {'reverse'}); 
    Error using matlab.graphics.axis.Axes/set 
    While setting property 'YDir' of class 'Axes': 
    Invalid enum value. Use one of these values: 'normal' | 'reverse'. 
    

    aunque esto funciona:

    set(gca, {'YDir'}, {'reverse'}); % Property name is also a cell array 
    
  • La función gca no se puede utilizar indistintamente como un mango cuando se realizan tareas pendientes t de indexación (que es por lo guardado en primer lugar a una variable h en el ejemplo anterior):

    >> gca.YDir 
    Undefined variable "gca" or class "gca.YDir". 
    >> gca.YDir = 'reverse' % Creates a variable that shadows the gca function 
    gca = 
        struct with fields: 
    
        YDir: 'reverse' 
    

Por último, si quieres algo de código que cambiará la propiedad 'YDir' no importa lo que su estado actual es , usted puede hacer esto:

set(gca, 'YDir', char(setdiff({'normal', 'reverse'}, get(gca, 'YDir')))); 
% or... 
h = gca; 
h.YDir = char(setdiff({'normal', 'reverse'}, h.YDir)); 
+0

¡Hermoso! (Me gusta mucho la combinación de MATLAB y SO, al hacer rápidamente un cálculo :) – Rook

+3

En caso de que el trazado corresponda a un trazado en 3D, el eje Y por lo general se invierte por defecto (puede verificarlo con 'get (gca, 'YDir')) 'En ese caso, intente:' set (gca, 'YDir', 'normal'); ' – tashuhka

9

El comando

axis ij

También invertirá el eje Y (negativo por encima del eje x; positivo a continuación).

+0

Esto también funciona – Mahm00d

6

Las soluciones en la parte superior de la pila no funcionó para mí,

  • imagesc(x,y,data) % results in a flipped plot, the y axis is upside down

  • set(gca,'YDir','reverse'); % gives an error

  • axis ij; % still gives the flipped plot

lo hizo el trabajo fue el siguiente:

imagesc(x,y,data); axis xy; % results in the correct plot 

La propiedad YDir ha desaparecido en la versión de MATLAB (2013 en adelante) que estoy usando.

+1

Usted es un ángel –

+0

Creo que esta es la respuesta de las apuestas aquí, especialmente la última línea 'imagesc (tiempo, y, matriz); eje xy;'. Los comandos 'set ('YDir', 'reverse');' y 'set ('YDir', 'normal');' existen en mi Matlab 2016a. No entiendo lo que quiere decir que algunas propiedades se han desvanecido, probablemente, simplemente ha cambiado. –

+0

Que yo sepa, la propiedad '' YDir'' siempre ha estado presente, y su configuración nunca me ha dado un error. Esto ha funcionado. para mí en versiones de 2013, 2014 y 2016. – gnovice

2

Para actualizar esta respuesta, ya que todavía es un popular resultado Google: A partir de R2014a, la forma correcta de darle la vuelta al eje Y es el siguiente:

>> axis ij 

Este cambio puede ser revertida a través del siguiente comando

>> axis ji 

Para invertir los ejes X o Z, haga lo siguiente

set(gca,'XDir','reverse');

set(gca,'ZDir','reverse');

En lo personal, creo que habría sido más fácil para mantener la opción ydir, pero ¿qué sé yo.

+0

Que yo sepa, la propiedad '' YDir'' siempre ha estado presente, y su configuración nunca ha sido me ha dado un error. Esto me ha funcionado en las versiones de 2013, 2014 y 2016. – gnovice

0

Como alternativa a YDir (por alguna razón, actualmente no puedo ver) puede girar los ejes con view. Para dar la vuelta al eje Y, use

view(0,-90); 
Cuestiones relacionadas