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

时间:2016-04-02 12:42:05

标签: matlab plot matlab-figure figure

我们说我有两个数字存储在单独的文件A.figB.fig中,其中包含两个单独的图表。有没有办法加载A.fig然后执行hold on之类的操作,然后在为B.fig创建的图中加载A.fig,以便我在同一轴上有两个图?

1 个答案:

答案 0 :(得分:4)

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

实际情节是axes的儿童,是figure的孩子。因此,您可以通过使用axes将第二个axes的子项复制到第一个copyobj来实现您的目标。在此之前,使用openfig加载数字。这种方法的优点是可以复制不同类型的情节' (linearea,...)。

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

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

如果您在R2014b 之前有Matlab版本,则需要使用setget函数,因为您无法使用. - 表示法。可以找到更多信息here。您可以在加载图形后使用gca获取当前轴,如下所示:

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

...或get手动从figure处理 - 如下所示:

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);

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

example