我正在编写一个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 ])
答案 0 :(得分:0)
我的理由仍然不完全清楚,但here被说出来了:
根据文档,如果覆盖子图的区域,则删除 现有的并创建一个新的。 AFAIK没有办法避免这种情况 行为。有一个带子图()的重叠轴的例子 文件;请注意,它通过指定轴来避免这种情况 用轴而不是另一个子图。
如果你只参考两个轴,你可能会和你相处 一旦创建了句柄,就保存好。
建议的解决方案也适用于我的情况:
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]));
无论如何,奇怪的问题。