我正在使用subplot命令绘制5 x 3图,但每个子图周围都有很大的边距。
如何控制它们周围的边距大小?
有人可以帮忙吗?
figure;
for c=1:15
subplot(5,3,c);
imagesc(reshape(image(:,c), 360,480)), ;colormap gray; axis image;
end
答案 0 :(得分:15)
问题是Matlab会为每个轴分配position
属性,以便每个图周围都有空间。您可以调整position
属性,也可以从文件交换中获取subaxis并按照您喜欢的方式设置子图。
答案 1 :(得分:12)
查看轴的 LooseInset 和 OuterPosition 属性: http://undocumentedmatlab.com/blog/axes-looseinset-property/
答案 2 :(得分:1)
自MATLAB R2019b起,您可以使用tiledlayout函数来控制子图的间距。
下面是一个示例,该示例显示了如何获取没有图块间距的子图:
figure
example_image = imread('cameraman.tif');
t = tiledlayout(5,3);
nexttile
for c= 1:15
imagesc(example_image(:,c))
if c < 15
nexttile
end
end
t.TileSpacing = 'None';
答案 3 :(得分:0)
除了其他答案外,您还可以尝试FileExchange中的Chad Greene的smplot。这将产生一个'small multiple'图,并自动处理Matlab的position
属性的一些麻烦。
下面的示例分别显示默认的subplot
行为,smplot
(关闭轴)和smplot
(打开轴):
image = randn(360*480,15);
% default subplot
figure;
for c=1:15
subplot(5,3,c);
imagesc(reshape(image(:,c), 360,480));
colormap gray;
axis image;
end
% smplot axis off
figure;
for c=1:15
smplot(5,3,c);
imagesc(reshape(image(:,c), 360,480));
colormap gray;
axis off;
end
% smplot axis on
figure;
for c=1:15
smplot(5,3,c,'axis','on');
imagesc(reshape(image(:,c), 360,480));
colormap gray;
axis tight;
end
答案 4 :(得分:0)
要最小化每个子图周围的空白区域,请运行:[1]
for c=1:15
h_ax = subplot(5,3,c);
% [...]
outerpos = get(h_ax,'OuterPosition');
ti = get(h_ax,'TightInset');
left = outerpos(1) + ti(1);
bottom = outerpos(2) + ti(2);
ax_width = outerpos(3) - ti(1) - ti(3);
ax_height = outerpos(4) - ti(2) - ti(4);
set(h_ax,'Position',[left bottom ax_width ax_height]);
end
此实现自动化了乔纳斯回答中概述的原则。