How to zoom a figure and show the details?

조회 수: 16 (최근 30일)
Mpho Lencwe
Mpho Lencwe 2024년 7월 21일
댓글: Benjamin Kraus 2024년 7월 22일
Good day,
How can I zoom a figure to show the details and include the zoomed area of the figure within the original figure?

답변 (2개)

Walter Roberson
Walter Roberson 2024년 7월 21일
Create a second axes. copyobj() the content of the first axes to the second axes. Turn zoom on for the second axes.
Note: it is more work if the zoomed in version has to react to changes in the original plot.
  댓글 수: 2
Mpho Lencwe
Mpho Lencwe 2024년 7월 22일
Hello @Walter Roberson thank you very much for your quick respnse. Can you provide a step by step guide if you have an opened MATLAB Figure such as the Figure toolbar?
Walter Roberson
Walter Roberson 2024년 7월 22일
Are you working with figure() objects, or are you working with uifigure() objects (such as App Designer) ?

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


Benjamin Kraus
Benjamin Kraus 2024년 7월 22일
편집: Benjamin Kraus 2024년 7월 22일
One way to do this is using tiledlayout.
im = imread('peppers.png');
t = tiledlayout(20,20);
% Create one big axes that fills the entire layout.
axbig = nexttile(t, [20 20]);
% Add the image to the big axes.
image(axbig, im);
% Now add a small axes in the upper right corner of the big axes.
axsmall = copyobj(axbig, t);
n = tilenum(t, 2, 16);
axsmall.Layout.Tile = n;
axsmall.Layout.TileSpan = [4 4];
% Now zoom-in on the big axes
axbig.XLim = [50 100];
axbig.YLim = [100 150];
% Optional: Add a rectangle to the small axes to reflect the big axes
% limits
rectangle(axsmall, 'Position', [50 100 50 50], 'LineWidth',1, 'EdgeColor','r');
If you want to get clever, you can use the LimitsChangedFcn to update the rectangle when the zoom of the big axes change.
  댓글 수: 1
Benjamin Kraus
Benjamin Kraus 2024년 7월 22일
I can't tell if you were trying to do the reverse: Soom the small image, so here's the reverse option.
im = imread('peppers.png');
t = tiledlayout(20,20);
% Create one big axes that fills the entire layout.
axbig = nexttile(t, [20 20]);
% Add the image to the big axes.
image(axbig, im);
% Now add a small axes in the upper right corner of the big axes.
axsmall = copyobj(axbig, t);
n = tilenum(t, 2, 12);
axsmall.Layout.Tile = n;
axsmall.Layout.TileSpan = [8 8];
% Now zoom-in on the small axes
axsmall.XLim = [75 100];
axsmall.YLim = [100 125];
% Hide the ticks on the small axes
xticks(axsmall,[]);
yticks(axsmall,[]);
% Add a rectangle to the small axes to reflect the big axes
% limits
rectangle(axbig, 'Position', [75 100 25 25], 'LineWidth',1, 'EdgeColor','r');

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

카테고리

Help CenterFile Exchange에서 Interactive Control and Callbacks에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by