在1个图中合并4个单独的子图,具有4个子图

时间:2015-09-25 12:25:00

标签: matlab plot

我有4个不同的数字。每个图包含2个子图(2行1列)

可以使用以下代码生成数据。

y = [2 2 3; 2 5 6; 2 8 9; 2 11 12];

for i = 1 : 4
    figure(i)
    subplot(2,1,1)
    bar(y)
    subplot(2,1,2)
    bar(y)
end

有了这4个数字,是否可以将它们组合成1个数字?

提供的解决方案不适用于我使用barwitherr创建图形的其他示例..为什么?

for i = 1 : 4
    figure(i)
    subplot(2,1,1)
    barwitherr([1 2 3 4;1 2 1 2], [5 6 7 8;1 2 3 4])
    subplot(2,1,2)
    barwitherr([1 2 3 4;1 2 1 2], [5 6 7 8;1 2 3 4])
end
for i = 1:4
    figure(i);
    ax = gca;
    f = get(ax, 'children');

    figure(5);
    s = subplot(2, 2, i);
    copyobj(f, s);
end

1 个答案:

答案 0 :(得分:0)

这可能不是您想要的,但是非常易于扩展。您可以遍历每个原始的4个数字,并获取其中每个subplot的句柄。一旦我们对使用figure(i)感兴趣的数字是当前的gcf对象,我们可以使用s = subplot(2, 1, i)获取每个子图元素的句柄,同时提供我们知道子图的结构和{{ 1}}是我们感兴趣的子图。

然后我们可以使用copyobj()allchild()将每个子图复制到新图中的新子图

i

allchild()复制barwitherr()中的所有信息,这些信息是您之前编辑我的问题答案时复制的代码中遗漏的。

如果我们将所有这些放在一起,我们可以生成完整的代码

copyobj(allchild(h), s)

for i = 1:4 figure(5); n = i + (i - 1); s1 = subplot(4, 2, n); s2 = subplot(4, 2, n+1); h = figure(i); hs1 = subplot(2, 1, 1); hs2 = subplot(2, 1, 2); copyobj(allchild(hs1), s1) copyobj(allchild(hs2), s2) end 用于复制原始排序。由此产生的输出是

Output