Matlab 2015b或Matlab 2016a。
我想让网格线穿过Subplot的数字之间的间距,以便更好地水平评估两张图片。 但是,我在右下角的两个数字之间有一个小的差距,因为这与数字不对齐
这个差距是因为右下角的10^4
。
我还希望水平线穿过两个数字之间的间距,但在间隙问题解决之前我无法做到。
关于线程在Matlab中使用colorbars和subplot的第3个参数的 Tight子图的答案here中所描述的完成相对对齐的代码?
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');
我尝试在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轴的某些点处为零点。当x轴变大时,MATLAB会自动添加新的xtick标记但没有完整的标签。 我认为在那里有另一个符号而不是零符号会更好。对于xticks的不完整标签,你怎么能有一些除零之外的其他标记?
如何将第二个数字中最后一个数字旁边的10 ^ 4对齐?
答案 0 :(得分:2)
我会得到当前的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)