Выровнять оси на одном рисунке

82
13

У меня есть фигура с двумя разными осями.


Мне не удастся выровнять оси и сделать вторую ось невидимой... Я попробовал пару, если что-то (см. комментарии в коде), но они не работали


clearvars
close all
clc

[X1,Y1,Z1] = peaks(25);

[X2,Y2,Z2] = peaks(25);
idx = find(X2>0);
Z2(idx) = NaN;

figure
set(gcf, 'Position', [0 0 800 800])
%%title
title('')

%%Create two axes
ax1 = axes;
pcolor(X1,Y1, Z1); shading flat

view(2)
ax2 = axes;
pcolor(X2,Y2, Z2); shading flat

%%link them
linkaxes([ax1,ax2]) %<==it didn't work

%ax1.XLim=[-3 3]; %<==I also tried this
%ax2.XLim=[-3 3];
%ax1.YLim=[-3 3];
%ax2.YLim=[-3 3];

%%Hide top axes
ax2.Visible = 'off'; %<== I thought that this would work
ax2.XTick = [];
ax2.YTick = [];

%%Colormaps
colormap(ax1, bone)
colormap(ax2, jet(26))

%%Add colorbars
set([ax1,ax2],'Position',[.17 .11 .685 .815]);
cb1 = colorbar(ax1,'position',[.08 .11 .03 .815]);
set(get(cb1,'ylabel'),'String','whatever','interpreter','latex', 'fontsize',20);
cb2 = colorbar(ax2,'position',[.92 .11 .03 .815]);
set(get(cb2,'ylabel'),'String','whatever','interpreter','latex', 'fontsize',20);

caxis(ax1,[-7 7])
caxis(ax2,[-5 5])

xlabel(ax1,'stuff')
ylabel(ax1,'other stuff')


fig


Примечание: Я использую 2017a

спросил(а) 2018-02-21T08:14:00+03:00 2 года, 7 месяцев назад
1
Решение
70

Я действительно не знаю, правильный ли ваш подход или нет, так как я никогда не пытался создать подобный сюжет раньше. Я знаю, что когда фигура создается, она уже включает ось по умолчанию. Таким образом, вызов функции axes() дважды вставляет две дополнительные оси на рисунке... и это доказательство:


Оси


Ни одна из ax1 и ax2 не является причиной этой проблемы. Несоответствующая ось является третьей, по умолчанию она была создана вместе с экземпляром фигуры. То, что происходит между ними, довольно странно (я потратил некоторое время на то, чтобы отлаживать все правильно, но до сих пор неясно, как обрабатываются экземпляры)... В любом случае я нашел обходное решение для его удаления:


clc();
clearvars();
close all;

[X1,Y1,Z1] = peaks(25);

[X2,Y2,Z2] = peaks(25);
idx = find(X2 > 0);
Z2(idx) = NaN;

f = figure();
set(gcf,'Position',[0 0 800 800])
title('');

ax1 = axes();
pcolor(X1,Y1,Z1);
shading flat;
xlabel(ax1,'stuff')
ylabel(ax1,'other stuff')

view(2);
ax2 = axes();
pcolor(X2,Y2,Z2);
shading flat;
ax2.Visible = 'off';

colormap(ax1,bone());
colormap(ax2,jet(26));

set([ax1,ax2],'Position',[.17 .11 .685 .815]);
cb1 = colorbar(ax1,'position',[.08 .11 .03 .815]);
set(get(cb1,'ylabel'),'String','whatever','interpreter','latex', 'fontsize',20);
cb2 = colorbar(ax2,'position',[.92 .11 .03 .815]);
set(get(cb2,'ylabel'),'String','whatever','interpreter','latex', 'fontsize',20);

caxis(ax1,[-7 7]);
caxis(ax2,[-5 5]);

set(ax1,'Tag','keep');
set(ax2,'Tag','keep');

delete(findall(f,'Type','Axes','-not','Tag','keep'));


Так как созданные вами оси ссылаются на переменную, после выполнения графика вы назначаете одно и то же свойство Tag. Затем, используя findall function на фигурном дескрипторе, вы найдете третью ось (которая не имеет предопределенного Tag), и вы удали это. Результат:

Результат


ИЗМЕНИТЬ


После дальнейших исследований, следующий код может использоваться вместо этого для получения более чистой версии этого построения:


clc();
clearvars();
close all;

[X1,Y1,Z1] = peaks(25);

[X2,Y2,Z2] = peaks(25);
idx = find(X2 > 0);
Z2(idx) = NaN;

f = figure();
set(gcf,'Position',[0 0 800 800])

ax1 = axes();
pcolor(X1,Y1,Z1);
shading flat;
xlabel(ax1,'stuff')
ylabel(ax1,'other stuff')

view(2);
ax2 = axes();
pcolor(X2,Y2,Z2);
shading flat;
ax2.Visible = 'off';

colormap(ax1,bone());
colormap(ax2,jet(26));

set([ax1,ax2],'Position',[.17 .11 .685 .815]);
cb1 = colorbar(ax1,'position',[.08 .11 .03 .815]);
set(get(cb1,'ylabel'),'String','whatever','interpreter','latex', 'fontsize',20);
cb2 = colorbar(ax2,'position',[.92 .11 .03 .815]);
set(get(cb2,'ylabel'),'String','whatever','interpreter','latex', 'fontsize',20);

caxis(ax1,[-7 7]);
caxis(ax2,[-5 5]);

ответил(а) 2018-02-22T00:03:00+03:00 2 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема