MATLAB|多个Figure图按子图合成一个Figure

1. 问题描述

MATLAB第三方工具箱输出的图像,往往需要进一步处理,例如

MATLAB|多个Figure图按子图合成一个Figure_第1张图片
mark

这两张图像,最好在MATLAB中合成到一个figure中显示,以便对比模态位移的差别。

2. 技术背景

MATLAB中的图像,实际上是一个对象集合,打开任意图像,输入gcf即显示当前图像的对象组成:

MATLAB|多个Figure图按子图合成一个Figure_第2张图片
mark

其中与图像内容相关的子对象为

  • CurrentAxis
  • Children

每个坐标轴对象(CurrentAxis)又有自己的子对象:

MATLAB|多个Figure图按子图合成一个Figure_第3张图片
mark

3. 解决方案

要将两个子图的图元重绘到新的figure,即需要将其中的坐标轴对象导出,复制到新的figure的子图中。关键函数为:

  • axChildren = get(ax(iloop),'Children');
  • copyobj(axChildren, gca);

4. 实施示例

4.1 打开需要重绘的两个figure

%% 子图读入
clc,clear,close all

fig(1) = open('fig1.fig');                                                      % 打开fig文件
fig(2) = open('fig2.fig');

ax(1) = get(fig(1), 'CurrentAxes');                                             % 获取坐标轴对象
ax(2) = get(fig(2), 'CurrentAxes');
MATLAB|多个Figure图按子图合成一个Figure_第4张图片
mark

4.2 复制坐标轴对象到新的figure

figure
for iloop = 1:2
    subplot(1,2,iloop)                                                          % 子图循环
    axChildren = get(ax(iloop),'Children');                                     % 获取axes所有子对象
    copyobj(axChildren, gca);                                                   % 复制对象到子图的axes
    
    ylim([0 20]),grid on                                                        % 图像参数设置
    xlabel('normalized mode shape')
    ylabel('radius [mm]')
    title(str_title{iloop})
end
MATLAB|多个Figure图按子图合成一个Figure_第5张图片
mark

5. 常见问题

需要注意的是,仅拷贝子图对象,可能会丢失一些图像定义,如legend等,与原图不完全相同,还需要一定的自定义设置。

MATLAB|多个Figure图按子图合成一个Figure_第6张图片
mark

示例代码详见:

  • https://git.coding.net/frank0449/matlab.git
  • matlab /1612_figureSubplot /

本文用时 30 m

你可能感兴趣的:(MATLAB|多个Figure图按子图合成一个Figure)