0. 原由
Matlab使用过程中,会遇到需要将多个图形Figure文件合并成一个文件的需求,便于在一个坐标轴内对曲线进行合并的显示和比较。如下图:分别使用P控制、PID控制、模糊PID控制、神经网络PID控制方法,得到了某系统的阶跃响应结果,希望将四种控制方法的阶跃响应结果合并到同一图形Figure下。

希望合并后的结果:

1. 思路
Matlab提供了函数copyobj,可以复制图形对象及其子级,可以以此实现多个图形Figure文件的合并。
copyobj(h,p) % 将图形对象p复制到对象h中
具体步骤为:
- 选定目标坐标轴(axes)对象h;
- 获取图形Figure中各个坐标轴(axes)对象中的曲线(Line)对象句柄hl和图例(Legend)对象句柄hg;
- 使用copyobj函数将曲线hl复制到目标坐标轴h中;
- 为曲线对象添加图例;
- 将合并后的Figure图形保存成.fig文件。
2. 函数
笔者使用Matlab软件开发了函数CombFigs.m,实现多个图形Figure文件的合并,简单易用,下面通过实例详细演示。
function CombFigs(varargin)
% CombFigs(varargin)将不同figures图片合并到一个figure中
% 调用格式
% 极简方式:
% CombFigs() 不带任何输入参数,将当前目录下所有fig文件合并成一个fig文件
% 默认合并后的fig文件名为 合并Figure文件.fig
% 指定目标fig文件名:
% CombFigs(figname) figname为合并后的fig文件名,将当前目录下所有fig文件合并为figname文件
% 指定目标fig文件名和要合并的文件名称
% CombFigs(figname,figfiles) figname为合并后的fig文件名,
% figfiles为待合并的fig文件,cell数组格式,将figfiles文件合并为figname文件
3. 演示
3.1 三条相位不同的正弦信号合并
%% 测试1: 三条相位不同的正弦信号合并
% 生成fig文件
t = linspace(0,4*pi,100);
y1 = sin(t);
y2 = 1.2*sin(t+pi/3);
y3 = 0.9*sin(t+2*pi/3);
hf1 = figure;
plot(t,y1,'b')
hf2 = figure;
plot(t,y2,'r--')
hf3 = figure;
plot(t,y3,'k-.')
savefig(hf1,'正弦曲线1.fig')
savefig(hf2,'正弦曲线2.fig')
savefig(hf3,'正弦曲线3.fig')
% 极简模式调用,将当前目录下所有fig文件合并为合并Figure文件.fig
CombFigs()
合并前图形:

合并后图形:

3.2 形状拼图合并
%% 测试2
% 生成fig文件
x1=[0 1 1];y1=[3 3 2];
x2=[1 2 2 1];y2=[3 3 2 2];
x3=[2 3 3 2];y3=[3 3 2 2];
x4=[0 2 0];y4=[3 1 1];
x5=[1 3 3];y5=[2 2 0];
x6=[0 2 3 0];y6=[1 1 0 0];
hf1 = figure;
fill(x1,y1,'y');
hf2 = figure;
fill(x2,y2,'m');
hold on
fill(x3,y3,'c');
hf3 = figure;
fill(x4,y4,'r');
hf4 = figure;
fill(x5,y5,'b');
hf5 = figure;
fill(x6,y6,'g');
savefig(hf1,'图形1.fig')
savefig(hf2,'图形2.fig')
savefig(hf3,'图形3.fig')
savefig(hf4,'图形4.fig')
savefig(hf5,'图形5.fig')
% 将当前目录下所有fig文件合并为合并Figure文件.fig
CombFigs('组合图形',{'图形1.fig','图形2.fig','图形3.fig','图形4.fig','图形5.fig'})
legend off
合并前图形:

合并后图形:

3.3 不同控制方法阶跃响应曲线合并
%% 测试3 不同控制方法阶跃响应曲线合并
% 将当前目录下四种控制方法阶跃响应结果fig文件合并为控制对比.fig
CombFigs('控制对比',{'P控制.fig','PID控制.fig','模糊PID控制输出.fig','神经网络PID控制.fig'})
合并前图形:

合并后图形:

3.4 百花争艳图合并
%% 测试4 百花争艳图合并
% 将当前目录下枝干、花、蝴蝶、兔子、月亮等fig文件合并为百花争艳图.fig
CombFigs('百花争艳图',{'0-枝干.fig','1-花.fig','2-兔子.fig','3-蝴蝶.fig','4-月亮.fig'})
合并前图形:

合并后图形:

4. 源程序下载
有Matlab/Simulink方面的技术问题,欢迎发送邮件至944077462@qq.com讨论。更多Matlab/Simulink原创资料,欢迎关注微信公众号:Matlab Fans
使用Matlab将多个图形Figure文件合并