Есть ли способ перевернуть ось y вверх дном в матлаб-графиках, чтобы положительное направление оси y, а не вверх, уменьшалось?
(Прошу вас, пожалуйста, не говорите, распечатайте его, затем разверните бумагу, -)
Есть ли способ перевернуть ось y вверх дном в матлаб-графиках, чтобы положительное направление оси y, а не вверх, уменьшалось?
(Прошу вас, пожалуйста, не говорите, распечатайте его, затем разверните бумагу, -)
'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));
Команда
axis ij
Также изменит ось Y (отрицательная над осью x, положительная ниже).
Решения в верхней части стека не работают для меня,
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 и выше), которую я использую.
Чтобы обновить этот ответ, поскольку он по-прежнему является популярным результатом Google: Начиная с R2014a, правильный способ перевернуть ось Y состоит в следующем:
>> axis ij
Это изменение можно изменить с помощью следующей команды
>> axis ji
Чтобы перевернуть оси X или Z, выполните следующие действия
set(gca,'XDir','reverse');
set(gca,'ZDir','reverse');
Лично я считаю, что было бы проще сохранить параметр YDir, но что я знаю.
В качестве альтернативы YDir
(по какой-то причине я не вижу в настоящее время) вы можете вращать оси с помощью view
. Чтобы повернуть ось y вверх дном, используйте
view(0,-90);