two matlab figures as inset

조회 수: 11 (최근 30일)
omnia
omnia 2017년 5월 15일
편집: Yukthi S 2024년 9월 3일
Hello all I have 4 saved matlab figures (.fig) and i want three to be the inset of one. How can I do this.
  댓글 수: 1
Cam Salzberger
Cam Salzberger 2017년 5월 15일
It is not clear what you mean by "inset". Do you mean that you have four figures, each containing one axes, and you would like to have one figure containing four axes (like subplot)? Or that you have four figures with a bunch of stuff on them, and you would like to change it to one figure with four uitabs?

댓글을 달려면 로그인하십시오.

답변 (1개)

Yukthi S
Yukthi S 2024년 9월 3일
편집: Yukthi S 2024년 9월 3일
Hi @omnia,
I assume that you want to create a main figure in MATLAB with three inset plots in it from the saved .FIG files.
To do so, you can follow these steps:
Step-1: Open the saved figures using openfig in the MATLAB code.
Step-2: Create a new figure to serve as main plot.
Step-3: Use the axes function to create inset axes within the main figure.
Step-4: Copy the contents of the loaded figures into the main figure and the inset axes using copyobj.
You can refer to the following MathWorks documentation links to get more insights on copyobj and openfig:
Hers is a sample code to help with the creation of 3 insets inside a main plot:
% Load the saved .fig files
fig1 = openfig('figure1.fig', 'invisible');
fig2 = openfig('figure2.fig', 'invisible');
fig3 = openfig('figure3.fig', 'invisible');
fig4 = openfig('figure4.fig', 'invisible');
% Create a new figure for the combined(main plot) plot
mainFig = figure;
% Create main axes in the new figure
mainAxes = axes('Parent', mainFig, 'Position', [0.1, 0.1, 0.8, 0.8]);
% Copy the contents of fig1 to the main axes
axes1Children = get(get(fig1, 'CurrentAxes'), 'Children');
copyobj(axes1Children, mainAxes);
% Close the original figure
close(fig1);
% Create inset axes for fig2, fig3, and fig4
inset1 = axes('Parent', mainFig, 'Position', [0.15, 0.7, 0.2, 0.2]);
inset2 = axes('Parent', mainFig, 'Position', [0.4, 0.7, 0.2, 0.2]);
inset3 = axes('Parent', mainFig, 'Position', [0.65, 0.7, 0.2, 0.2]);
% Copy the contents of fig2, fig3, and fig4 to the inset axes
axes2Children = get(get(fig2, 'CurrentAxes'), 'Children');
copyobj(axes2Children, inset1);
axes3Children = get(get(fig3, 'CurrentAxes'), 'Children');
copyobj(axes3Children, inset2);
axes4Children = get(get(fig4, 'CurrentAxes'), 'Children');
copyobj(axes4Children, inset3);
% Close the original figures
close(fig2);
close(fig3);
close(fig4);
% Optional: Adjust properties of the main and inset axes
set(mainAxes, 'Box', 'on');
set(inset1, 'Box', 'on');
set(inset2, 'Box', 'on');
set(inset3, 'Box', 'on');
% Optional:Set titles, labels, or other properties as needed
%title(mainAxes, 'Main Plot');
title(inset1, 'Inset 1');
title(inset2, 'Inset 2');
title(inset3, 'Inset 3');
annotation('textbox', [0.1, 0.05, 0.8, 0.05], 'String', 'Main Plot', ...
'HorizontalAlignment', 'center', 'EdgeColor', 'none', 'FontSize', 12);
Make sure the saved figures are on the same path as the MATLAB code before running the code.

카테고리

Help CenterFile Exchange에서 Subplots에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by