Поворот оси Y вверх ногами в MATLAB - PullRequest
32 голосов
/ 19 ноября 2009

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

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

Ответы [ 5 ]

54 голосов
/ 19 ноября 2009

Свойство 'YDir' осей может принимать значение '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));
9 голосов
/ 14 февраля 2013

Команда

axis ij

Также будет реверсировать ось Y (отрицательно над осью x; положительно ниже).

6 голосов
/ 11 мая 2015

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

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

2 голосов
/ 23 мая 2015

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

>> axis ij

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

>> axis ji

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

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

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

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

0 голосов
/ 11 сентября 2017

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

view(0,-90);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...