How can I draw a frame around the inset plot?

How can I draw a frame around the inset plot?
x1 = linspace(0,1);
x2 = linspace(3/4,1);
y1 = sin(2*pi*x1);
y2 = sin(2*pi*x2);
figure(1)
% plot on large axes
plot(x1,y1)
% create smaller axes in top right, and plot on it
axes('Position',[.6 .6 .2 .2])
box on
plot(x2,y2)
My desired output is the following one:

 Accepted Answer

Use an annotation object —
x1 = linspace(0,1);
x2 = linspace(3/4,1);
y1 = sin(2*pi*x1);
y2 = sin(2*pi*x2);
figure(1)
% plot on large axes
plot(x1,y1)
Ax1 = gca;
pos1 = Ax1.Position;
% create smaller axes in top right, and plot on it
Ax2 = axes('Position',[.6 .6 .2 .2]);
box on
plot(x2,y2)
pos2 = Ax2.OuterPosition;
a2 = annotation('rectangle', pos2);
a2.Color = 'r';
a2.LineWidth = 2;
.

7 Comments

Sim
Sim on 2 Sep 2024
Edited: Sim on 2 Sep 2024
Thanks both @Star Strider and @Jaimin!! Very nice answers! :-) .......I do not know which one to accept since they are similar and both efficient :-) I would accept both of them :-)
@Sim There's a "solution" for that, kind of. 🙂 Note: you can only accept one answer (so pick the best one) but you can click the "Vote" icon for as many Answers as you want. Voting for an answer will also award reputation points. So an Accept for one will earn that person 4 points, and a Vote for the other will award that person 2 points. If they're equally good answers in your eyes, then you can ask the one you accepted, or someone else, to Vote for the one you voted for to award an additional 2 points.
For full details on how to earn reputation points see: https://www.mathworks.com/matlabcentral/answers/help?s_tid=al_priv#reputation
thanks a lot @Image Analyst :-) I voted their answers :-)
I did not understand very well
"If they're equally good answers in your eyes, then you can ask the one you accepted, or someone else, to Vote for the one you voted for to award an additional 2 points."
since I did not accept any answer yet... but of course, if anyone has suggestions on which answer to accept, I will follow those suggestions :-)
To explain further, Accept and Vote are two different icons/actions you can do. You can only accept one answer but you can vote for as many as you like. If you think both answers are the same, and want to award the same number of points to both (4 points), then you can Accept the answer from person #1 and Vote for the answer from person #2. So now #1 has 4 points and #2 has only 2 points. But you can ask #1, or me or anyone, to Vote for #2. That will add an additional 2 points to #2, now giving person #2 a total of 4 points - the same as #1 (who you accepted).
They both gave code samples and used annotation but @Jaimin's code had more/better comments so that might give him the edge. However a lot of people just paste your question into an AI engine and paste it here. The AI answers almost always have words in it like "I understand that you want to...". I'm not saying @Jaimin's was an AI answer, but that phrase is a red flag for AI for many of us. Not that AI answers are worse than human answers - in many cases they give better answers than humans - it's just something to consider.
Very clear, thanks a lot! To be honest, I got the same feeling about a possible AI anwer... OK, lets do as suggested... I accept one answer and I hope people can upvote the ather one to equally recognise both answers... :-)
I would evaluate which solution provides a more aesthetically pleasing red frame that closely matches the reference. Let @Sim decide.

Sign in to comment.

More Answers (1)

Hi @Sim
Based on the description, I understand that you want to add a frame around the inset plot in the figure, as shown below.
Below is the sample code to meet the requirement.
x1 = linspace(0,1);
x2 = linspace(3/4,1);
y1 = sin(2*pi*x1);
y2 = sin(2*pi*x2);
figure(1)
% Plot on large axes
plot(x1, y1)
% Create smaller axes in top right, and plot on it
inset_axes = axes('Position', [.6 .6 .2 .2]);
plot(x2, y2)
% Get the current position of the inset axes
pos = inset_axes.Position;
% Adjust the position to make the rectangle slightly larger
margin = 0.01; % Adjust this value to change the size of the margin
new_pos = [pos(1) - margin, pos(2) - margin, pos(3) + 2*margin, pos(4) + 2*margin];
% Add a red box around the inset plot
annotation('rectangle', new_pos, 'Color', 'r', 'LineWidth', 2);
Please refer this MathWorks Documentation to understand “annotation”
Annotation:
I hope this will be helpful.

1 Comment

Sim
Sim on 2 Sep 2024
Edited: Sim on 2 Sep 2024
Thanks @Jaimin! I would like to accept both your's and @Star Strider answer.. And following the @Image Analyst suggestions, I accepted the @Star Strider answer and I asked people to upvote yours, so that you will be equally awarded as @Star Strider (i.e. with the same score) :-)

Sign in to comment.

Categories

Find more on 2-D and 3-D Plots in Help Center and File Exchange

Asked:

Sim
on 2 Sep 2024

Commented:

on 2 Sep 2024

Community Treasure Hunt

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

Start Hunting!