两个保存的图形,希望它们显示在 MATLAB 中的单个图形中
Two saved figures, want them to show in a single graph in MATLAB
假设我有两个图形存储在单独的文件 A.fig
和 B.fig
中,其中包含两个单独的图。有没有一种方法可以加载 A.fig
然后执行类似 hold on
的操作,然后在为 A.fig
创建的图中加载 B.fig
以便我将两个图都放在同一个轴上?
我认为这个问题并不是 this 的重复问题。 OP 不要求提取数据的方法,而是要求结合两个存储图形的方法。诚然,他可以提取数据并重新绘制。但是有一个更优雅的解决方案...
实际地块是 axes
的子项,而 axes
是 figure
的子项。因此,您可以通过将第二个 axes
的子项复制到第一个 axes
和 copyobj
来实现您想要的效果。在此之前,加载带有 openfig
的数字。这种方法的好处是可以复制不同类型的'plots'(line
,area
,...)。
从 B.fig
复制到 A.fig
的代码如下,从 R2014b 开始:
fig1 = openfig('A');
fig2 = openfig('B', 'invisible');
copyobj(fig2.Children.Children, fig1.Children);
如果您的 Matlab 版本 早于 R2014b,您需要使用 set
和 get
函数,因为您不能使用 .
-符号。可以找到更多信息 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);
如果在子图中手动组合,将得到以下结果:
假设我有两个图形存储在单独的文件 A.fig
和 B.fig
中,其中包含两个单独的图。有没有一种方法可以加载 A.fig
然后执行类似 hold on
的操作,然后在为 A.fig
创建的图中加载 B.fig
以便我将两个图都放在同一个轴上?
我认为这个问题并不是 this 的重复问题。 OP 不要求提取数据的方法,而是要求结合两个存储图形的方法。诚然,他可以提取数据并重新绘制。但是有一个更优雅的解决方案...
实际地块是 axes
的子项,而 axes
是 figure
的子项。因此,您可以通过将第二个 axes
的子项复制到第一个 axes
和 copyobj
来实现您想要的效果。在此之前,加载带有 openfig
的数字。这种方法的好处是可以复制不同类型的'plots'(line
,area
,...)。
从 B.fig
复制到 A.fig
的代码如下,从 R2014b 开始:
fig1 = openfig('A');
fig2 = openfig('B', 'invisible');
copyobj(fig2.Children.Children, fig1.Children);
如果您的 Matlab 版本 早于 R2014b,您需要使用 set
和 get
函数,因为您不能使用 .
-符号。可以找到更多信息 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);
如果在子图中手动组合,将得到以下结果: