Поместите две оси Y на изображение imagesc в MATLAB

У меня есть, как мне кажется, простая проблема: у меня есть матрица, которую я отображаю с помощью imagesc. Я просто хочу показать вторую ось Y в правой части изображения. Как я могу это сделать? Пример:

clear all;
aMatrix = rand(20,30);
yAxis1 = 32.*(1:size(aMatrix,1));
yAxis2 = 165.*(1:size(aMatrix,1));
xAxis = 1:size(aMatrix,2);
imagesc(yAxis1, xAxis1, aMatrix);

Ниже показано изображение с yAxis1 слева. Это здорово, но как показать yAxis2 справа от изображения одновременно? Спасибо.


person Spacey    schedule 08.01.2014    source источник


Ответы (2)


  aMatrix = rand(20,30);
  yAxis1 = 32.*(1:size(aMatrix,1));
  yAxis2 = 165.*(1:size(aMatrix,1));
  xAxis = 1:size(aMatrix,2);
  h1=imagesc(xAxis, yAxis1, aMatrix);set(gca,'YDir','normal');
  ax1=gca;
  set(ax1,'YColor','r','YAxisLocation','right');
  set(ax1,'XTickLabel',' ');
  ax2=axes('Position',get(ax1,'Position'),'YAxisLocation','left');
  h2=imagesc(xAxis, yAxis2,aMatrix,'Parent',ax2);
  set(gca,'YDir','normal');

введите здесь описание изображения

person lennon310    schedule 08.01.2014
comment
Спасибо, но не могли бы вы пояснить, что именно происходит? - person Spacey; 09.01.2014
comment
@Learnaholic объединяет два изображения на одном рисунке (в вашем случае это одно и то же изображение aMatrix). ax1 - это дескриптор фигуры, на которой ось y установлена ​​​​справа, когда вы просматриваете изображение во второй раз, вы сначала получаете информацию об осях до imagesc. Позиция 1-го изображения получается через get(ax1,'Position'). И ось Y установлена ​​слева. - person lennon310; 09.01.2014
comment
Я вообще не понимаю, что происходит. Когда вы впервые создаете изображение, его ось Y по умолчанию находится слева. Почему у вас есть «xticklabel»? Мы не имеем дело с xaxis. Затем в x2 вы устанавливаете его обратно влево ?? Предполагается, что он должен быть справа... в конце концов, вы снова устанавливаете Идир в "нормальный" режим... почему? - person Spacey; 09.01.2014
comment
set(ax1,'YColor','r','YAxisLocation','right'); установлена ​​ось Y справа. Вы можете удалить эту строку и изменить YaxisLocation в ax2 на «право». Без «нормальной» настройки в Ydir последовательность маркировки будет обратной (меньшее число вверху). Проверьте эту страницу для получения дополнительных параметров осей: mathworks.com/help/matlab/ref /axes_props.html Вы можете попробовать удалить каждую строку и наблюдать за изменениями в отображении. Спасибо - person lennon310; 09.01.2014

Довольно похожее решение с использованием yyaxis :

  aMatrix = rand(20,30);
  yAxis1 = 32.*(1:size(aMatrix,1));
  yAxis2 = 165.*(1:size(aMatrix,1));
  xAxis = 1:size(aMatrix,2);
  yyaxis left
  imagesc(xAxis, yAxis1, aMatrix);
  ax = gca;
  ax.YColor = ax.XColor;
  ylabel('Left Side')
  yyaxis right
  imagesc(xAxis, yAxis2,aMatrix);
  ax.YColor = ax.XColor;
  ylabel('Right Side')  
person kaj    schedule 13.03.2020