Подтвердить что ты не робот

Перемещение оси y вверх ногами в MATLAB

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

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

4b9b3361

Ответ 1

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

Ответ 2

Команда

axis ij

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

Ответ 3

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

  • 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 и выше), которую я использую.

Ответ 4

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

>> axis ij

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

>> axis ji

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

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

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

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

Ответ 5

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

view(0,-90);