2009-11-19 2 views
28

Есть ли способ перевернуть ось y вверх дном в графиках Matlab, чтобы положительное направление оси y, а не вверх, опустилось вниз?Перевернутая ось y вверх ногами в MATLAB

(я прошу вас, пожалуйста, не говорите, распечатать его, затем переверните бумагу ;-)

+0

@Rook Пожалуйста, обратите внимание на ответ Ejo60, который я считаю лучшим ответом здесь. –

ответ

53

'YDir' axes property может быть либо 'normal' или 'reverse'. По умолчанию это 'normal' для большинства участков, но некоторые участки автоматически изменят его на 'reverse', например image или imagesc.

Вы можете установить направление оси у осей с либо set функции или точка индексации (в новых версиях MATLAB):

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

Я сбит с толку некоторые другие ответы говорят о том, что 'YDir' свойство как-то исчезло или дает ошибку. Я не видел такого поведения в версиях MATLAB с 2013, 2014 или 2016. Есть только два возможных подводных камней я наткнулся:

  • Свойство не может быть установлен с массивом ячеек, только строка символов:

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

    хотя это работает:

    set(gca, {'YDir'}, {'reverse'}); % Property name is also a cell array 
    
  • gca функция не может использоваться взаимозаменяемо в качестве ручки при выполнении Do т индексирование (именно поэтому я первым сохранил его в переменной h в приведенном выше примере):

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

Наконец, если вы хотите какой-то код, который будет переключать 'YDir' свойства независимо от того, что его текущее состояние , вы можете сделать это:

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

Красивая! (Мне очень нравится сочетание Matlab & SO при быстром вычислении :) – Rook

+3

В случае, если график соответствует 3D-графику, по умолчанию ось Y по умолчанию отменяется (вы можете проверить ее с помощью 'get (gca, 'YDir') '. В этом случае попробуйте:' set (gca, 'YDir', 'normal'); ' – tashuhka

9

команда

axis ij

Также изменит ось Y (отрицательно выше оси x; положительный ниже).

+0

Это тоже работает. – Mahm00d

6

решений на вершине стека не работает для меня,

  • 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

что сделал работу было следующее:

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

Свойство YDir исчез в версии MatLab (2013 и выше), что я использую.

+1

Вы ангел –

+0

Я думаю, что это ставки, ответьте здесь, особенно последняя строка 'imagesc (time, y, matrix); axis xy;'. Команды 'set ('YDir', 'reverse');' и 'set ('YDir', 'normal');' существуют в моем Matlab 2016a. Я не понимаю, что вы имеете в виду, что какое-то свойство исчезло, возможно, оно только что изменилось. –

+0

Насколько мне известно, свойство '' YDir'' всегда присутствовало, и установка его никогда не выдавала мне ошибку. для меня в версиях с 2013, 2014 и 2016. – gnovice

2

Чтобы обновить этот ответ, так как он по-прежнему является популярным результатом Google: По R2014a, правильный путь, чтобы перевернуть ось Y выглядит следующим образом:

>> axis ij 

Это изменение может быть отменено с помощью следующих команда

>> axis ji 

Для того, чтобы перевернуть X или Z осей, сделайте следующее

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

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

Лично я думаю, что было бы легче держать вариант YDir, но то, что я знаю.

+0

Насколько мне известно, свойство '' YDir'' всегда присутствовало, и установка его никогда не была g если я ошибаюсь. Это сработало для меня в версиях с 2013, 2014 и 2016 гг. – gnovice

0

В качестве альтернативы YDir (по какой-то причине я не вижу в настоящее время) вы можете вращать оси с помощью view. Чтобы повернуть ось y вверх дном, используйте

view(0,-90); 
Смежные вопросы