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

matlab plot matlab-figure figure

292 观看

1回复

148 作者的声誉

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

作者: secluded 的来源 发布者: 2016 年 4 月 2 日

回应 (1)


4

6985 作者的声誉

决定

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


实际地块是的子项axes,是的子项figure。因此,你可以实现你的第二个子女复制想要的东西axes进入第一axescopyobj。在此之前,用加载数字openfig。这种方法的优点复制不同类型的“阴谋”(的linearea...)。

复制B.fig到的代码A.fig如下,并且从R2014b开始工作

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

如果您具有R2014b之前的Matlab版本,则需要使用setand get函数,因为您不能使用.-notation。可以在此处找到更多信息。您可以gca在加载图形后使用来获取当前轴,如下所示:

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

...或者像这样getfigure-handle 手动操作它们:

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

下面的脚本创建两个图形,然后应用以上代码将它们组合在一起。
如果你是有matlab版R2013b或更高,更换hgsavesavefig为中建议文档

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

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

例

作者: Matt 发布者: 02.04.2016 07:22
32x32