1. 问题描述
MATLAB第三方工具箱输出的图像,往往需要进一步处理,例如
这两张图像,最好在MATLAB中合成到一个figure中显示,以便对比模态位移的差别。
2. 技术背景
MATLAB中的图像,实际上是一个对象集合,打开任意图像,输入gcf
即显示当前图像的对象组成:
其中与图像内容相关的子对象为
- CurrentAxis
- Children
每个坐标轴对象(CurrentAxis)又有自己的子对象:
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');
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
5. 常见问题
需要注意的是,仅拷贝子图对象,可能会丢失一些图像定义,如legend等,与原图不完全相同,还需要一定的自定义设置。
示例代码详见:
- https://git.coding.net/frank0449/matlab.git
- matlab /1612_figureSubplot /
本文用时 30 m