使用Matlab将多个图形Figure文件合并

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文件合并
在这里插入图片描述

  • 34
    点赞
  • 233
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MatlabFans_Mfun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值