我希望有一个紧密的子图,即子图中的数字之间的最小间距
subplot
和new_tight_subplot
之间移动,以及我在Matlab的FileExchange中描述了最流行的紧密子图。 无(等最流行的here Pekka的版本)可以传递以下代码
data=randi(513,513);
ax1=subplot(2,1,1);
plot(mat2gray(pdist(data, 'correlation')));
cbar1=colorbar(ax1);
axis(ax1, 'square');
xlim([0 size(mat2gray(pdist(data, 'correlation')),2)]);
set(cbar1, 'Visible', 'off')
ax2=subplot(2,1,2);
imshow(squareform( mat2gray(pdist(data, 'correlation')), 'tomatrix') );
colormap('parula'); colorbar;
axis(ax2, 'square');
Pekka的tight_subplot
需要没有第三个参数的语法。
它也会像示例中的颜色栏一样失败。我不懂为什么。
我认为问题可能是这样一个事实,即colorbar对象是图形的子元素,而不是轴,它们的位置是用标准化的图形单位定义的;喜欢所讨论的注释对象here。 但是,我不确定如何为此调整紧密的子图。
代码
data = randi(513, 513);
ax1=tight_subplot(2,1,[.01 .03],[.1 .01],[.01 .01]);
plot(mat2gray(pdist(data, 'correlation')));
ax2=tight_subplot(2,1,[.01 .03],[.1 .01],[.01 .01]);
imshow(squareform( mat2gray(pdist(data, 'correlation')), 'tomatrix') );
你得到了
plot
失败,第二个图中由于某种原因有嘈杂的部分。为什么呢?
ax1=axes('OuterPosition', [0 0.5 0.5 0.5]);
plot(u, 'Parent', ax1);
set(ax1, 'XLim', [0, size(u,1)]);
cbar1 = colorbar(); % not needed to assign ax1
set(cbar1, 'Visible', 'off')
ax3 = axes('OuterPosition', [0 0 0.5 0.5]);
image(data, 'Parent', ax3);
D=mat2gray(pdist(pTFD, 'correlation'));
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');
xlim([0 size(D,2)]);
set(cbar2, 'Visible', 'off')
ax4 = axes('OuterPosition', [0.51 0 0.5 0.5]);
imshow( D_square );
axis(ax4, 'square');
其中2x2数字系统和我认为相当的地方
xlim([0 size(D,2)]);
与set(ax1, 'XLim', [0, size(D,2)]);
相同。正确?如何使用带有颜色条和第三个参数的Matlab紧密子图?
答案 0 :(得分:2)
tight_subplot
的第三个参数定义了轴对象之间的间隙。对于内置subplot
命令,第三个参数定义将哪个轴设置为图的CurrentAxes
。此选项在tight_subplot
中不可用,因为我个人认为它没有用。通常,我使用返回的轴手柄来指定添加图形的位置。
添加colorbar
时会重新定位现有轴对象。
我已经为tight_subplot
添加了第二个输出参数,它提供了轴的输出位置,以便您可以在添加颜色条后“重置”轴位置。
[hax, position] = tight_subplot();
% Add a colorbar which alters the positions
colorbar();
% Now reset the positions back to where they were
set(hax, {'Position'}, pos);
答案 1 :(得分:1)
我可能只是手动设置我的轴对象的位置以获得您想要的效果,而不是尝试在文件交换上处理subplot
和不同的版本。您可以使用标准化单位,以便在父图形的大小发生变化时缩放位置。
此外,您可以设置轴的OuterPosition
属性,其中考虑了正确显示轴的所有文本标签所需的空间。
figure
data=randi(513,513);
set(0, 'defaultaxeslooseinset', [0 0 0 0])
D = mat2gray(pdist(data, 'correlation'));
square = squareform(D, 'tomatrix');
% Set normalized outer position (x,y,width,height)
ax1 = axes('OuterPosition', [0, 0.5, 1, 0.5]);
plot(D, 'Parent', ax1);
set(ax1, 'XLim', [0, size(square, 1)])
axis(ax1, 'square');
cbar1 = colorbar();
set(cbar1, 'Visible', 'off')
% Set normalized outer position (x,y,width,height)
ax2 = axes('OuterPosition', [0 0 1 0.5]);
imshow(square);
colormap('parula'); colorbar;
axis(ax2, 'square');
如果你删除轴上的x和y刻度
set([ax1,ax2], 'xtick', [], 'ytick', []);
这可以很容易地适应任何尺寸,类似于以下
figure;
% [Rows, Columns]
axdim = [3, 3];
width = 1 ./ axdim(2);
height = 1./ axdim(1);
[x,y] = meshgrid(linspace(0,1,axdim(2)+1), ...
linspace(0,1, axdim(1)+1));
for k = 1:numel(x)
ax = axes('OuterPosition', [x(k), y(k), width, height]);
set(ax, 'xtick', [], 'ytick', []);
end