How can I draw a frame around the inset plot?

5 vues (au cours des 30 derniers jours)
Sim
Sim le 2 Sep 2024
Commenté : Sam Chak le 2 Sep 2024
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:

Réponse acceptée

Star Strider
Star Strider le 2 Sep 2024
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 commentaires
Sim
Sim le 2 Sep 2024
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... :-)
Sam Chak
Sam Chak le 2 Sep 2024
I would evaluate which solution provides a more aesthetically pleasing red frame that closely matches the reference. Let @Sim decide.

Connectez-vous pour commenter.

Plus de réponses (1)

Jaimin
Jaimin le 2 Sep 2024
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 commentaire
Sim
Sim le 2 Sep 2024
Modifié(e) : Sim le 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) :-)

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by