How to zoom a figure and show the details?

17 次查看(过去 30 天)
Mpho Lencwe
Mpho Lencwe 2024-7-21,17:31
评论: Benjamin Kraus about 2 hours 前
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,18:35
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 about 13 hours 前
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 about 4 hours 前
Are you working with figure() objects, or are you working with uifigure() objects (such as App Designer) ?

请先登录,再进行评论。


Benjamin Kraus
Benjamin Kraus about 2 hours 前
编辑:Benjamin Kraus about 2 hours 前
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 about 2 hours 前
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 中查找有关 Visual Exploration 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by