Поворот оси Y вверх ногами в MATLAB

28

Есть ли способ перевернуть ось y вверх дном в матлаб-графиках, чтобы положительное направление оси y, а не вверх, уменьшалось?

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

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

5 ответов

55
Лучший ответ

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

Вы можете установить направление осей оси y либо с помощью функции 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 не может использоваться взаимозаменяемо как дескриптор при выполнении индексации точек (именно поэтому я сначала сохранил его в переменной 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, когда я быстро делаю вычисления :)
  • 3
    Если график соответствует 3D- get(gca,'YDir') по умолчанию ось Y обычно переворачивается (вы можете проверить это с помощью get(gca,'YDir') . В этом случае попробуйте: set(gca,'YDir','normal');
9

Команда

axis ij

Также изменит ось Y (отрицательная над осью x, положительная ниже).

  • 0
    Это тоже работает.
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. Я не понимаю, что вы имеете в виду, что какая-то собственность исчезла; возможно, это только что изменилось.
Показать ещё 1 комментарий
2

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

>> axis ij

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

>> axis ji

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

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

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

Лично я считаю, что было бы проще сохранить параметр YDir, но что я знаю.

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

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

view(0,-90);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню