Matlab:将独立Figure中的Plot复制到新Figure的Subplot中
解决Matlab中将已有绘图复制到子图的问题
在Matlab R2016b里,你之前用copyobj(f1.Children, h1)没成功的原因很明确——你复制的是整个坐标轴对象,而不是你真正需要的那条plot曲线(p1/p2)。直接复制坐标轴到subplot的坐标轴里会产生嵌套的axes结构,这不是你想要的效果。
正确的操作步骤
我们需要把目标绘图对象(也就是p1、p2)直接复制到对应的子图坐标轴(h1、h2)中,同时单独处理图例(legend),因为它是属于原figure的独立对象。
下面是完整的可运行代码:
% 你的原始代码(稍作修改,把legend句柄存下来) f1 = figure; p1 = plot([1 2],[1 2], 'r'); lgd1 = legend(p1, 'Test'); % 保存legend句柄,方便后续复制 f2 = figure; p2 = plot([2 3], [2 3], 'g'); f3 = figure; h1 = subplot(1,2,1); h2 = subplot(1,2,2); % 核心复制操作 % 1. 把p1复制到h1子图的坐标轴中 copyobj(p1, h1); % 2. 复制图例到f3,并关联到h1 lgd1_copy = copyobj(lgd1, f3); lgd1_copy.Location = lgd1.Location; % 保持和原图例相同的位置 % 3. 把p2复制到h2子图的坐标轴中 copyobj(p2, h2); % 可选:同步原图的坐标轴范围,确保显示效果一致 h1.XLim = p1.Parent.XLim; h1.YLim = p1.Parent.YLim; h2.XLim = p2.Parent.XLim; h2.YLim = p2.Parent.YLim;
额外说明
- 如果你的原figure里有多个绘图对象(比如多条曲线),可以用
p1.Parent.Children获取该坐标轴下的所有绘图对象,再批量复制到目标子图中。 - 图例默认是原figure的子对象,所以复制后需要手动关联到对应的子图坐标轴,或者调整位置参数让它显示在正确的子图区域内。
- 在R2016b版本中,
copyobj对plot、line这类绘图对象的复制支持很稳定,直接指定目标坐标轴作为父对象即可。
内容的提问来源于stack exchange,提问作者pkj




