两个保存的图形,希望它们显示在 MATLAB 中的单个图形中

Two saved figures, want them to show in a single graph in MATLAB

假设我有两个图形存储在单独的文件 A.figB.fig 中,其中包含两个单独的图。有没有一种方法可以加载 A.fig 然后执行类似 hold on 的操作,然后在为 A.fig 创建的图中加载 B.fig 以便我将两个图都放在同一个轴上?

我认为这个问题并不是 this 的重复问题。 OP 不要求提取数据的方法,而是要求结合两个存储图形的方法。诚然,他可以提取数据并重新绘制。但是有一个更优雅的解决方案...


实际地块是 axes 的子项,而 axesfigure 的子项。因此,您可以通过将第二个 axes 的子项复制到第一个 axescopyobj 来实现您想要的效果。在此之前,加载带有 openfig 的数字。这种方法的好处是可以复制不同类型的'plots'(linearea,...)。

B.fig 复制到 A.fig 的代码如下,从 R2014b 开始:

fig1 = openfig('A');
fig2 = openfig('B', 'invisible');
copyobj(fig2.Children.Children, fig1.Children);

如果您的 Matlab 版本 早于 R2014b,您需要使用 setget 函数,因为您不能使用 .-符号。可以找到更多信息 here。您可以使用 gca 在加载图形后获取当前轴,如下所示:

fig1 = openfig('A');
ax1 = gca;
fig2 = openfig('B', 'invisible');
ax2 = gca;
copyobj(get(ax2,'children'), ax1);

... 或 get 手动从 figure-handle 像这样:

fig1 = openfig('A');
fig2 = openfig('B', 'invisible');
copyobj(get(get(fig2,'children'),'children'), get(fig1,'children'));

下面的脚本创建了两个图形,然后应用上面的代码将它们组合起来。
如果您的 Matlab 版本为 R2013b 或更高版本,请按照 documentation.

中的建议将 hgsave 替换为 savefig
%% create two figure files
x = linspace(0,2*pi,100);
figure; hold on;
plot(x,sin(x),'b');
area(x,0.5*sin(x));
set(gca,'xlim',[0,2*pi]);
hgsave('A');
figure; hold on;
plot(x,cos(x),'r');
area(x,0.5*cos(x),'FaceColor','r');
hgsave('B');

%% clear and close all
clear;
close all;

%% copy process
fig1 = openfig('A');
fig2 = openfig('B', 'invisible');
copyobj(get(get(fig2,'children'),'children'), get(fig1,'children'));
close(fig2);

如果在子图中手动组合,将得到以下结果: