【问题标题】:how to remove the gap between subplots and around [duplicate]如何消除子图之间和周围的差距[重复]
【发布时间】:2013-04-30 20:00:57
【问题描述】:

我在一个图中绘制了两个子图 (2x1)。我想删除两个子图之间的所有间距,并删除顶部子图的 xlable 和 xlabel 刻度。另外,我正在尝试删除子图之外的所有间距。我试试

set(gca, 'LooseInset', get(gca,'TightInset'))

但它不起作用。现在我要手动删除这些边距和标签,我需要处理 60 个数字,而手动完成所有这些操作非常耗时。有什么更好的方法吗?谢谢。

我也尝试了 subtightplot,它有助于减少所有边距,但 xlabel 和 ylabel 也被削减了

margins=[0 0];
t = 0:0.01:10;
y1 = sin(t);
y2 = cos(t);
h1 = subtightplot(2,1,1, margins);
plot(t, y1);
ystr = {'sin(x)','(dimensionless)'}
hy1 = ylabel(ystr);
set(gca, 'fontsize', 14);
set(hy1, 'fontsize', 14);
set(gca, 'XTickLabel', [],'XTick',[])

h2 = subtightplot(2,1,2,margins);
plot(t, y2, 'r-o');
hx2=xlabel('frequency');
hy2=ylabel('amplitude');
set(gca, 'fontsize', 14);
set(hx2, 'fontsize', 14);
set(hy2, 'fontsize', 14);

我也尝试了 subplot_tight 但它更糟

【问题讨论】:

  • “它有助于减少所有边距,但 xlabel 和 ylabel 也会被削减”这是什么意思?

标签: matlab margins subplot


【解决方案1】:

您可以使用来自 FEX 的 subplot_tightsubtightplot。 删除所有 x-tick 和标签使用:

set(gca, 'XTickLabel', [],'XTick',[])

在适当的子情节中...

编辑:

由于您确实想包含标签等,您可以使用axes 中的position 句柄:

t = 0:0.01:10;
y1 = sin(t);
y2 = cos(t);


left= 0.15;
bottom1=0.5;
bottom2=0.05;
width=0.8;
height=0.45; % which is also bottom1-bottom2

axes('Position',[left bottom1 width height]);
plot(t, y1);
ystr = {'sin(x)','(dimensionless)'}
hy1 = ylabel(ystr);
set(gca, 'fontsize', 14);
set(hy1, 'fontsize', 14);
set(gca, 'XTickLabel', [],'XTick',[])


axes('Position',[left bottom2 width height])
plot(t, y2, 'r-o');
hx2=xlabel('frequency');
hy2=ylabel('amplitude');
set(gca, 'fontsize', 14);
set(hx2, 'fontsize', 14);
set(hy2, 'fontsize', 14);

【讨论】:

  • 感谢您的提示。我尝试了该代码,但我发现如果我将内容绘制得很紧,x 和 y 标签会被部分剪切。我已在原始问题中上传了示例代码。
  • 所以你需要重新表述这个问题......你问“删除两个子图之间的所有间距......另外,我正在尝试删除子图之外的所有间距”
  • 所以看来你需要在axes 中降到position 的级别才能做到这一点。
  • 看起来好多了。感谢您的帮助:)