Matlab 2015b или Matlab 2016a.
Я хотел бы, чтобы линии сетки проходили через интервал Subplot между фигурами, чтобы лучше оценивать два изображения по горизонтали. Однако у меня есть небольшой зазор между двумя фигурами в правом нижнем углу, потому что цифры не совпадают.
Где зазор из-за 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);
Это дает
Где эти галочки не являются XMinorTicks, а просто галочками (ошибочно отмечены на картинке). Это нулевые точки в некоторых точках оси абсцисс. Когда ось x становится больше, MATLAB автоматически добавляет новые метки xtick, но без полных меток. Думаю, лучше бы там был другой символ, чем ноль. Как можно поставить отметку, отличную от нуля, для неполных меток xticks?
Как вы можете выровнять 10 ^ 4 рядом с последним числом на втором рисунке?
1 ответ
Я бы получил текущие местоположения xtick, преобразовал их в строки, а затем установил свойство xticklabels
осей.
xticks = get(ax2, 'xtick');
labels = arrayfun(@(x)sprintf('%.2g', x), xticks, 'uniform', 0);
set(ax2, 'xtick', xticks, 'xticklabels', labels);
Если вы хотите, чтобы они вычислялись динамически по мере изменения размера фигуры (и пересчета xticks), вы можете связать этот код с SizeChangedFcn
фигуры.
func = @(varargin)set(ax2,'xticklabels',arrayfun(@(x)sprintf('%.2g',x),get(ax2, 'xtick'),'uni',0));
set(gcf, 'SizeChangedFcn', func)
ax2
в своем коде! Я обновил свой ответ.
set(gca, 'XTickMode', 'manual');
работает, но игнорирует xminorticks. Я думаю, что лучшим решением будет динамическая настройка xMinorTicks set(gca,'XMinorTick', '[somethingDynamic]');
.
xminortick
?
Похожие вопросы
Связанные вопросы
Новые вопросы
matlab
MATLAB - это высокоуровневая языковая и интерактивная среда программирования для численных расчетов и визуализации, разработанная MathWorks. Не используйте оба тега [matlab] и [octave], если явно не задан вопрос о сходстве или различии между ними. При использовании этого тега, пожалуйста, укажите версию MATLAB, с которой вы работаете (например, R2017a).
axes('OuterPosition'...
использовать только подзаголовки?