You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Matlab:将独立Figure中的Plot复制到新Figure的Subplot中

解决Matlab中将已有绘图复制到子图的问题

在Matlab R2016b里,你之前用copyobj(f1.Children, h1)没成功的原因很明确——你复制的是整个坐标轴对象,而不是你真正需要的那条plot曲线(p1/p2)。直接复制坐标轴到subplot的坐标轴里会产生嵌套的axes结构,这不是你想要的效果。

正确的操作步骤

我们需要把目标绘图对象(也就是p1p2)直接复制到对应的子图坐标轴(h1h2)中,同时单独处理图例(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

火山引擎 最新活动