Есть ли способ перевернуть ось 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);