我们说我有两个数字存储在单独的文件A.fig
和B.fig
中,其中包含两个单独的图表。有没有办法加载A.fig
然后执行hold on
之类的操作,然后在为B.fig
创建的图中加载A.fig
,以便我在同一轴上有两个图?
答案 0 :(得分:4)
我认为这个问题并不是this的重复问题。 OP不要求提取数据的方法,而是要求组合两个存储的数字的方法。不可否认,他可以提取数据并重新绘制。但是有一个更优雅的解决方案......
实际情节是axes
的儿童,是figure
的孩子。因此,您可以通过使用axes
将第二个axes
的子项复制到第一个copyobj
来实现您的目标。在此之前,使用openfig
加载数字。这种方法的优点是可以复制不同类型的情节' (line
,area
,...)。
要从B.fig
复制到A.fig
的代码如下,从R2014b 开始:
fig1 = openfig('A');
fig2 = openfig('B', 'invisible');
copyobj(fig2.Children.Children, fig1.Children);
如果您在R2014b 之前有Matlab版本,则需要使用set
和get
函数,因为您无法使用.
- 表示法。可以找到更多信息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);
如果在子图中手动组合,则会得到以下结果: