【问题标题】:Why do independent subplots overwrite each other? Why is the order of plotting important?为什么独立的子图会相互覆盖?为什么绘图的顺序很重要?
【发布时间】:2016-04-25 16:38:27
【问题描述】:

我正在编写一个需要精确定位一些子图的 gui:

h = figure('Units','pixels','Position',[1920 432  1881 982]*0.5);

ax.VSize = 815.3800*0.5
ax.VOffset = 48.9228*0.5
ax.HSize = 1.8063e+03*0.5
ax.HOffset = 56.4480*0.5

subax.VSize = 0.33*(ax.VSize-3*ax.VOffset);
subax.HSize = ax.HSize;
subplot(313,'units','pixels','Position',[ax.HOffset ax.VOffset ax.HSize subax.VSize ])
subplot(312,'units','pixels','Position',[ax.HOffset 2*ax.VOffset+subax.VSize subax.HSize subax.VSize])
subplot(311,'units','pixels','Position',[ax.HOffset 3*ax.VOffset+2*subax.VSize subax.HSize subax.VSize])

这给了我想要的结果:

但是,当我将子图的顺序更改为:

subplot(311,'units','pixels','Position',[ax.HOffset 3*ax.VOffset+2*subax.VSize subax.HSize subax.VSize])
subplot(312,'units','pixels','Position',[ax.HOffset 2*ax.VOffset+subax.VSize subax.HSize subax.VSize])
subplot(313,'units','pixels','Position',[ax.HOffset ax.VOffset ax.HSize subax.VSize ])

我刚刚绘制了最后一个子图:

我真的不明白为什么会这样? 为什么子图会相互覆盖?

不幸的是,绘图顺序对我来说很重要,那么我该如何解决这个问题?


有趣的是,我无法用其他数量或排列的子图重现该问题,例如:

subax.VSize = 0.5*(ax.VSize-2*ax.VOffset);
subax.HSize = 0.5*(ax.HSize-2*ax.HOffset);
subplot(221,'units','pixels','Position',[ax.HOffset 2*ax.VOffset+subax.VSize subax.HSize subax.VSize])
subplot(222,'units','pixels','Position',[2*ax.HOffset+subax.HSize 2*ax.VOffset+subax.VSize subax.HSize subax.VSize])
subplot(223,'units','pixels','Position',[ax.HOffset ax.VOffset subax.HSize subax.VSize ])
subplot(224,'units','pixels','Position',[2*ax.HOffset+subax.HSize ax.VOffset subax.HSize subax.VSize ])

【问题讨论】:

  • 我无法在 R2014b (OS X) 上复制此问题。您使用的是什么平台和版本?
  • Windows 7 上的Matlab R2015b。似乎与this有关。
  • 相关问题:Second subplot disappearing.

标签: matlab plot matlab-figure


【解决方案1】:

原因我仍然不完全清楚,但here 说:

根据文档,如果您覆盖子图的区域,它会删除 现有的并创建一个新的。 AFAIK 没有办法避免这种情况 行为。有一个带有 subplot() 的覆盖轴的示例 文件;请注意,它通过指定轴来避免这种情况 用轴,而不是另一个子图。

如果你只参考这两个轴,你可能会得到你的 使用创建后保存的句柄。

建议的解决方案也适用于我的情况:

s(1) = subplot(311,'units','pixels')
s(2) = subplot(312,'units','pixels')
s(3) = subplot(313,'units','pixels')

set(s(1),'Position',[ax.HOffset 3*ax.VOffset+2*subax.VSize subax.HSize subax.VSize])
set(s(2),'Position',[ax.HOffset 2*ax.VOffset+subax.VSize subax.HSize subax.VSize])
set(s(3),'Position',[ax.HOffset ax.VOffset ax.HSize subax.VSize ])

但是,当我指定每个子图的确切位置时,子图的全部目的就没有了,所以我将只使用:

axes('units','pixels','Position',floor([ax.HOffset 3*ax.VOffset+2*subax.VSize subax.HSize subax.VSize]));
axes('units','pixels','Position',floor([ax.HOffset 2*ax.VOffset+subax.VSize subax.HSize subax.VSize]));
axes('units','pixels','Position',floor([ax.HOffset ax.VOffset 0.96*hsize subax.VSize]));

无论如何都是奇怪的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    相关资源
    最近更新 更多