1. 問題描述
MATLAB第三方工具箱輸出的圖像,往往需要進一步處理,例如
mark
這兩張圖像,最好在MATLAB中合成到一個figure中顯示,以便對比模態位移的差別。
2. 技術背景
MATLAB中的圖像,實際上是一個對象集合,打開任意圖像,輸入gcf
即顯示當前圖像的對象組成:
mark
其中與圖像內容相關的子對象為
- CurrentAxis
- Children
每個坐標軸對象(CurrentAxis)又有自己的子對象:
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');
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
mark
5. 常見問題
需要注意的是,僅拷貝子圖對象,可能會丟失一些圖像定義,如legend等,與原圖不完全相同,還需要一定的自定義設置。
mark
示例代碼詳見:
- https://git.coding.net/frank0449/matlab.git
- matlab /1612_figureSubplot /
本文用時 30 m