2009-11-19 36 views
28

C'è un modo per capovolgere l'asse y in grafici matlab, in modo che la direzione positiva dell'asse y, anziché su, punti verso il basso?Capovolgimento asse y in MATLAB

(vi prego, si prega di non dire, stamparlo, quindi ruotare la carta intorno ;-)

+0

@Rook Si prega di notare la risposta di Ejo60 che secondo me è la migliore risposta qui ora. –

risposta

53

Il 'YDir' axes property può essere sia 'normal' o 'reverse'. Per impostazione predefinita è 'normal' per la maggior parte dei grafici, ma alcuni grafici lo modificano automaticamente su 'reverse', ad esempio le funzioni image o imagesc.

È possibile impostare la direzione dell'asse y di un asse sia con la funzione set o indicizzazione punto (nelle versioni più recenti MATLAB):

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

Sono sconcertato da alcune delle altre risposte dire che la La proprietà 'YDir' è in qualche modo scomparsa o sta dando un errore. Non ho visto un tale comportamento nelle versioni di MATLAB a partire dal 2013, 2014 o 2016. Ci sono solo due potenziali insidie ​​mi sono imbattuto:

  • La proprietà non può essere impostato con un array di celle, solo una stringa di caratteri:

    >> 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'. 
    

    anche se questo funziona:

    set(gca, {'YDir'}, {'reverse'}); % Property name is also a cell array 
    
  • La funzione gca non può essere utilizzato in modo intercambiabile come maniglia quando si eseguono do t indicizzazione (che è il motivo per cui ho salvato in una variabile h nell'esempio di cui sopra):

    >> 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' 
    

Infine, se volete un po 'di codice che alternerà la proprietà 'YDir' non importa quale sia il suo stato attuale è , si può fare questo:

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

Bello! (Mi piace molto la combinazione MATLAB e SO, quando eseguo rapidamente un calcolo :) – Rook

+3

Nel caso in cui il grafico corrisponda a un grafico 3D, l'asse Y di solito è invertito di default (puoi controllarlo con get (gca, 'YDir' In questo caso, prova: 'set (gca, 'YDir', 'normale');' – tashuhka

9

Il comando

axis ij

Inverserà anche l'asse Y (negativo sopra l'asse x; positivo sotto).

+0

Anche questo funziona – Mahm00d

6

Le soluzioni sulla parte superiore della pila non ha funzionato per me,

  • 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

ciò che ha funzionato è stato il di seguito:

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

La proprietà YDir è scomparsa nella versione MATLAB (2013 e oltre) che sto usando.

+1

Sei un angelo –

+0

Penso che questa sia la risposta alle risposte qui, specialmente l'ultima riga 'images (tempo, y, matrice); asse xy;'. I comandi 'set ('YDir', 'reverse');' e 'set ('YDir', 'normal');' esistono nel mio Matlab 2016a. Non capisco cosa intendi che alcune proprietà siano svanite, probabilmente è appena cambiata –

+0

Per quanto ne so, la proprietà '' YDir'' è sempre stata presente e l'impostazione non mi ha mai dato un errore. per me nelle versioni a partire dal 2013, 2014 e 2016. – gnovice

2

Per aggiornare questa risposta, dal momento che è ancora un popolare risultato di Google: partire dal R2014a, il modo corretto di capovolgere l'asse Y è la seguente:

>> axis ij 

Questo cambiamento può essere invertita attraverso il seguente comando

>> axis ji 

Per capovolgere gli assi X o Z, effettuare le seguenti

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

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

Personalmente, penso che sarebbe stato più facile per mantenere l'opzione YDir, ma che ne so io.

+0

Per quanto ne so, la proprietà '' YDir'' è sempre stata presente e la sua impostazione non ha mai Dammi un errore Questo ha funzionato per me nelle versioni a partire dal 2013, 2014 e 2016. – gnovice

0

In alternativa a YDir (per qualche motivo non posso attualmente vedere) è possibile ruotare gli assi con view. Per capovolgere l'asse y, utilizzare

view(0,-90); 
Problemi correlati