How to create a rectangle to locate a zooming area in a plot?

51 views (last 30 days)
Hi guys!
I created an additional box within my figure to zoom a particular area of interest. I put this box in a position as desired. Now I want to create a rectangle within my figure to identify the coordinates of the zoom.
I want to get something like the blue rectangle in the following figure:
Can you help me?
Here is my script and attached to this post the required files:
%Planar Lyapunov Orbits (SE system, L1 point)
clear all; close all; clc;
%Data import
% Definition of path names and file names
Input_path_Fortran = 'D:\OneDrive\MSc_Thesis\Projects\Planar_Lyapunov_orbits\InputFiles\';
Output_path_Fortran = 'D:\OneDrive\MSc_Thesis\Projects\Planar_Lyapunov_orbits\OutputFiles\';
filename_Ly_orb = 'Planar_Lyapunov_SE_L1.txt';
filename_Ly_orb_selected = 'Planar_Lyapunov_SE_L1_evenly_spaced.txt';
%Import original database containing 4182 orbits
Ly_orb = import_txt_file([Input_path_Fortran,filename_Ly_orb],1,inf);
%Import filtered data containing 50 orbits
Ly_orb_sel = import_txt_file([Output_path_Fortran,filename_Ly_orb_selected],2,inf);
%Plots
load("Customized_colors.mat");
% Trova un modo per trasferire le opzioni di grafica di una figura a
% un'altra senza ripetere i comandi all'interno del plot (color, marker, et..)
figure
plot(Ly_orb.x0,Ly_orb.JacobiConstant,'.','color',my_cyan,'MarkerFaceColor'...
,my_cyan,'MarkerSize',2); hold on
plot(Ly_orb_sel.x0,Ly_orb_sel.JacobiConstant,'.','color',my_red,'MarkerFaceColor'...
,my_red,'MarkerSize',8); hold on
yline(Ly_orb_sel.JacobiConstant,'color',my_red,'LineStyle',":");
grid off;
xlabel('$x_0$','interpreter','latex','fontsize',12);
ylabel('$Jacobi\ Constant$','interpreter','latex','FontSize',12);
lgd = legend('$Original\ database$','$Filtered\ database$',...
'Orientation',"vertical",'Location',"northwest");
lgd.Interpreter = 'latex';
lgd.FontSize = 11;
% Zoom on a casual portion of figure to show the equally spaced Jacobi constant values
axes('position',[.63 .16 .25 .25])
box on % put box around new pair of axes
x_min = -0.9930;
x_max = -0.9925;
indexOfInterest = (Ly_orb.x0 < x_max) & (Ly_orb.x0 > x_min);
indexOfInterest_sel = (Ly_orb_sel.x0 < x_max) & (Ly_orb_sel.x0 > x_min);
plot(Ly_orb.x0(indexOfInterest),Ly_orb.JacobiConstant(indexOfInterest),...
'.','color',my_cyan,'MarkerFaceColor',my_cyan,'MarkerSize',2); hold on
plot(Ly_orb_sel.x0(indexOfInterest_sel),Ly_orb_sel.JacobiConstant(indexOfInterest_sel),...
'.','color',my_red,'MarkerFaceColor',my_orange,'MarkerSize',8); hold on
%yline(Ly_orb_sel.JacobiConstant(indexOfInterest_sel),'color',my_red,'LineStyle',":");
axis tight

Accepted Answer

Abolfazl Chaman Motlagh
Abolfazl Chaman Motlagh on 26 Feb 2022
in first axes use function rectangle.
y_min = min(Ly_orb.JacobiConstant(indexOfInterest)); % need indexofInterest for this
y_max = min(Ly_orb.JacobiConstant(indexOfInterest));
width = x_max-x_min;
height = y_max-y_min;
ROI_Position = [x_min y_min width height];
rectangle('Position',ROI_Position,'EdgeColor','b','LineWidth',0.5);
if you can select your axes. rectangle can get axes as input.
rectangle(axes,...)

More Answers (0)

Categories

Find more on Visual Exploration in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!