Matlab 2015b или Matlab 2016a.

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

enter image description here

Где зазор из-за 10^4 в нижнем правом углу. Я также хотел бы, чтобы горизонтальные линии проходили через промежуток между двумя фигурами, но я не могу этого сделать, пока проблема с зазором не будет решена.

Код, в котором выполняется относительное выравнивание, как описано в здесь ответе на тему Узкая подзаголовок с цветными полосами и третий подзаголовок параметр в Matlab?

data=randi(513,513);
D=mat2gray(pdist(data, 'correlation'));

% Set normalized outer position (x,y,width,height)
ax1=axes('OuterPosition', [0 0.5 0.5 0.5]);
plot(D, 'Parent', ax1);
xlim([0 size(D,2)]);
set(cbar1, 'Visible', 'off')
title('Signal');

ax2=axes('OuterPosition', [0.51 0.5 0.5 0.5]);
plot(D, 'Parent', ax2);
set(ax2, 'XLim', [0, size(D,1)])
axis(ax2, 'square');
title('Corr pdist');

Вывод ответа Сьювера

Я безуспешно пытался заменить два (2) на sprintf('%.2g', x) больше и меньше

ax2 = axes('OuterPosition', [0.51 0.5 0.5 0.5]);
plot(D, 'Parent', ax2);
set(ax2, 'XLim', [0, size(D,1)])
axis(ax2, 'square');
title('Corr pdist');
cbar2 = colorbar(); % ax2 not needed here in brackets
set(ax2, 'XLim', [0 size(D,2)]);
set(cbar2, 'Visible', 'off')
grid minor;
% https://stackoverflow.com/a/35776785/54964
xticks = get(ax2, 'xtick');
labels = arrayfun(@(x)sprintf('%.2g', x), xticks, 'uniform', 0);
set(ax2, 'xticklabels', labels);

Это дает

enter image description here

Где эти галочки не являются XMinorTicks, а просто галочками (ошибочно отмечены на картинке). Это нулевые точки в некоторых точках оси абсцисс. Когда ось x становится больше, MATLAB автоматически добавляет новые метки xtick, но без полных меток. Думаю, лучше бы там был другой символ, чем ноль. Как можно поставить отметку, отличную от нуля, для неполных меток xticks?


Как вы можете выровнять 10 ^ 4 рядом с последним числом на втором рисунке?

2
Léo Léopold Hertz 준영 3 Мар 2016 в 18:33
Вы, наверное, не сможете. Вы можете рассмотреть возможность использования меток с делениями на настраиваемых осях, чтобы не отображалось x10 ^ 4.
 – 
siliconwafer
3 Мар 2016 в 18:44
1
Какая версия Matlab? Это звучит глупо, но я думаю, что Mathworks изменил механизм отображения в версии 14a. Для меня (версия 15a) подсюжеты самовыравниваются
 – 
Matt
3 Мар 2016 в 19:26
Можно ли вместо использования axes('OuterPosition'... использовать только подзаголовки?
 – 
Matt
3 Мар 2016 в 19:31
Иди поищи другие его посты. Это похоже на один непрерывный вопрос ... stackoverflow.com/questions/35770961/…
 – 
Suever
3 Мар 2016 в 19:33

1 ответ

Лучший ответ

Я бы получил текущие местоположения xtick, преобразовал их в строки, а затем установил свойство xticklabels осей.

xticks = get(ax2, 'xtick');
labels = arrayfun(@(x)sprintf('%.2g', x), xticks, 'uniform', 0);
set(ax2, 'xtick', xticks, 'xticklabels', labels);

enter image description here

Если вы хотите, чтобы они вычислялись динамически по мере изменения размера фигуры (и пересчета xticks), вы можете связать этот код с SizeChangedFcn фигуры.

func = @(varargin)set(ax2,'xticklabels',arrayfun(@(x)sprintf('%.2g',x),get(ax2, 'xtick'),'uni',0));
set(gcf, 'SizeChangedFcn', func)
2
Suever 3 Мар 2016 в 19:55
Похоже, вы указали неправильные оси для получения значений xticks. Вы хотите получить xticks из ax2 в своем коде! Я обновил свой ответ.
 – 
Suever
3 Мар 2016 в 19:32
1
Ох, хорошо. Вы захотите установить xtickmode в ручной режим, чтобы он не пытался пересчитывать местоположения тиков. В своем ответе я изменил его, чтобы вручную установить для xticks то, что было до изменения меток.
 – 
Suever
3 Мар 2016 в 19:36
Да ты прав. set(gca, 'XTickMode', 'manual'); работает, но игнорирует xminorticks. Я думаю, что лучшим решением будет динамическая настройка xMinorTicks set(gca,'XMinorTick', '[somethingDynamic]');.
 – 
Léo Léopold Hertz 준영
3 Мар 2016 в 19:41
Почему бы просто не выключить xminortick?
 – 
Suever
3 Мар 2016 в 19:42
1
Я обновил свой ответ, чтобы предоставить динамическое решение.
 – 
Suever
3 Мар 2016 в 19:54