How to zoom a figure and show the details?
16 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Good day,
How can I zoom a figure to show the details and include the zoomed area of the figure within the original figure?
0 comentarios
Respuestas (2)
Walter Roberson
el 21 de Jul. de 2024
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 comentarios
Walter Roberson
el 22 de Jul. de 2024
Are you working with figure() objects, or are you working with uifigure() objects (such as App Designer) ?
Benjamin Kraus
el 22 de Jul. de 2024
Editada: Benjamin Kraus
el 22 de Jul. de 2024
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 comentario
Benjamin Kraus
el 22 de Jul. de 2024
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');
Ver también
Categorías
Más información sobre Interactive Control and Callbacks en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!