Tight subplot with colorbars and subplot's 3rd parameter in Matlab?

旧街凉风 提交于 2019-12-01 14:58:06

Rather than trying to deal with subplot and different versions on the file exchange, I would probably just manually set the positions of my axes objects to get the effect that you want. You can use normalized units so that the positions scale as the size of the parent figure changes.

Also, you can set the OuterPosition property of the axes which takes into account the room needed to properly display all text labels of the axes.

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');

And if you remove the x and y ticks on the axes

set([ax1,ax2], 'xtick', [], 'ytick', []);

This can easily be adapted to any dimensions with something similar to the following

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
user6013409

The third parameter of tight_subplot defines the gaps between axis objects. For the built-in subplot command, the third parameter defines which axis is set as the CurrentAxes of the Figure. This option is not available in tight_subplot because I personally did not find it useful. Typically, I use the returned axes handles to specify where to add graphics.

Existing axes objects are repositioned when you add a colorbar.

I have added a second output argument to tight_subplot which provides the output position of the axes so that you can "reset" the axes positions after adding a colorbar.

[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);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!