为什么子图位置会发生变化?

时间:2017-02-07 11:18:13

标签: matlab matlab-figure subplot

注意:在我的情况下,此问题发生在2016b。

我尝试将3x4子图一起制作成图,并勾选 标签仅在最左侧和底部子图上。但是,当我运行下面的代码时,第一个图似乎改变了大小:

figure
hold on
n = 12;
ax = gobjects(n,1);
for k = 1:n
pos = [0.1+0.2*(mod(k-1,4)), 0.65-0.3*floor(k/4-0.01), 0.2, 0.3]
ax(k) = subplot(3,4,k,'Position',pos);
end
set(ax(1:8),'XTick',[])
set(ax([2:4 6:8 10:12]),'YTick',[])

请注意,我正在打印pos。第一个子图的输出是

pos =

    0.1000    0.6500    0.2000    0.3000

但是当我再仔细检查第一个子情节的位置时......

ax(1).Position

ans =

    0.1300    0.7093   0.1566    0.2157

,情节如下: enter image description here

此外,我试图在之后操纵第一个子图的位置,但它只会使情况变得更糟,见下文:

ax(1).Position = [0.1000, 0.6500, 0.2000, 0.3000];

enter image description here

所有帮助表示赞赏!

1 个答案:

答案 0 :(得分:3)

我可以在R2016b中重现该问题。有趣的是,当你这样做时它会起作用:

figure
hold on
n = 12;
ax = gobjects(n,1);
for k = 1:n
    pos = [0.1+0.2*(mod(k-1,4)), 0.65-0.3*floor(k/4-0.01), 0.2, 0.3]
    ax(k) = subplot(3,4,k);
    set(ax(k),'Position',pos);
end
set(ax(1:8),'XTick',[])
set(ax([2:4 6:8 10:12]),'YTick',[])

唯一的变化是我首先创建子图,然后设置它的位置。

我不完全确定原因。但是,比较两个版本中轴的所有字段,我注意到在原始版本中,第一个轴的PlotBoxAspectRatio[0.9670 1.0000 0.9670],而其他所有轴的PlotBoxAspectRatio都为[0.8889 1.0000 0.8889] 1}}。在我的“修复”版本中,所有轴都有PlotBoxAspectRatio [0.8889 1.0000 0.8889]。不知道到底发生了什么。