Merge two .fig figures side by side by connecting yaxes in matlab

6 ビュー (過去 30 日間)
Apashanka Das
Apashanka Das 2022 年 2 月 28 日
コメント済み: Apashanka Das 2022 年 3 月 4 日

I have two figure files 'A.fig' and 'B.fig'. I want to have the two figues side by side such that right hand vertical axes line of 'A.fig' get merged with the left hand vertical axes line (yaxes) of 'B.fig'. And the new merged figure say 'C.fig' should be in .pdf format. Can anybody please help me out ? It would be of great help. I am posting the pdf files of 'A.fig' and 'B.fig'.

  2 件のコメント
Matt J
Matt J 2022 年 2 月 28 日
It would be easier for us if you post the original .fig files.
Apashanka Das
Apashanka Das 2022 年 3 月 2 日
@Matt J Sorry sir for late reply. I am posting here the original .fig files 'A.fig' and 'B.fig'. Please help me out. It would be of great help. Thanks.

サインインしてコメントする。

採用された回答

Robert U
Robert U 2022 年 3 月 2 日
Hi Apashanka Das,
you can copy objects from figure to figure using copyobj(). A bit tricky is to write a generally working code that can deal with different types of figures. But the function sketched below should be able to deal with the figures you have although it might need some adjustment to coloring.
open A.fig
open B.fig
mergeOpenFigs('C',1)
function [ newFh ] = mergeOpenFigs( sSaveFilename,saveFlag )
oldFh = findall(groot,'Type','figure');
% restore correct order of graphs
[~,indFh] = sort([oldFh.Number],'ascend');
oldFh = oldFh(indFh);
oldLegends = findall(oldFh,'Tag', 'legend');
oldAh = findall(oldFh,'Type','Axes');
newFh = figure;
oldFigPosition = vertcat(oldFh.Position);
newFh.Position = [newFh.Position(1:2), max(oldFigPosition(:,3:4),[],1)];
newAh = axes(newFh);
hold(newAh,'on');
colorOrder = get(0,'DefaultAxesColorOrder');
for ik = 1:size(oldAh)
copyobj(oldAh(ik).Children,newAh)
newAh.Children(ik).Color = colorOrder(ik,:);
labelString(ik,:) = {oldAh(ik).XLabel.String oldAh(ik).YLabel.String};
end
newAh.XLim = max(vertcat(oldAh.XLim),[],1);
newAh.YLim = max(vertcat(oldAh.YLim),[],1);
newAh.XLabel.String = unique(labelString(:,1));
newAh.YLabel.String = unique(labelString(:,2));
legend(newAh);
close(oldFh);
if saveFlag
if exist('sSaveFilename','var')
saveas(newFh,sSaveFilename,'fig');
saveas(newFh,sSaveFilename,'pdf');
close(newFh);
newFh = [];
end
end
end
Kind regards,
Robert

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeInteractive Control and Callbacks についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by