【问题标题】:Why does subplot position change?为什么子图位置会改变?
【发布时间】:2017-06-24 14:47:26
【问题描述】:

注意:在我的案例中,这个问题发生在 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

情节如下所示:

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

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

感谢所有帮助!

【问题讨论】:

  • 无法在 MATLAB 2014b 中重现。当我运行你的代码时,我得到了一个很好的子图网格,它们都很整洁。
  • 尝试调整图形窗口的大小
  • 在 2016a 中也无法重现。这就是我得到的:i.stack.imgur.com/xFSnb.jpg
  • 我明白了。谢谢您的意见!我应该提到,就我而言,问题发生在 2016b 年。
  • 另请注意在 2015b 中可重现,我得到的结果与 @Sardar_Usama 相同

标签: matlab matlab-figure subplot


【解决方案1】:

我可以在 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',[])

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

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

【讨论】:

    猜你喜欢
    • 2021-07-30
    • 1970-01-01
    • 2020-12-01
    • 2012-07-25
    • 1970-01-01
    • 2014-04-06
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多