5.0

5.0 | 28 ratings Rate this file 59 downloads (last 30 days) File Size: 4.13 KB File ID: #5961

magnify

by Rick Hindman

 

30 Sep 2004 (Updated 04 Oct 2004)

No BSD License  

Turns the mouse into a pop-up magnifying glass to look at details of 2D plots.

Editor's Notes:

This file was a File Exchange Pick of the Week

Download Now | Watch this File

File Information
Description

Ever wish MATLAB had a magnifying glass so you could look at the details of a small region of your plots without having to zoom in and out again and again? Just run 'magnify.m' with the figure of interest as the current figure, then use the left mouse button to bring up a magnified veiw that you control. Or use the 'Ctrl' key while clicking to bring up a magnifying glass that 'locks' onto the figure when released (for use when copying and printing figures). Use the '<' and '>' keys to make the magnifying glass smaller or larger. Use '-' and '+' to decrease or increase the magnification level.

Acknowledgements
This submission has inspired the following:
magnifyrecttofig, shiftline, On-figure magnifier
MATLAB release MATLAB 7.0.1 (R14SP1)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (35)
05 Oct 2004 Alex Podgaetsky

Excellent!!!

07 Oct 2004 Fahad Al Mahmood

Wonderful Function Indeed! Congratulations!

29 Oct 2004 James Goodwin

very very good!

30 Jan 2005 Kang Dong-il

You made what I REALLY needed.. thank you

07 May 2005 Tsakani Lotten

Brilliant!

28 Sep 2005 Christina Hebert

Very cool

11 Nov 2005 Vicky Svidenko

Wow! Excellent!

25 Feb 2006 John D'Errico

On a scale of 1 to 5, I'll put this at 6.

02 Mar 2006 Marcelø Zeri

Very good!

02 Mar 2006 Jiro Doke

Very nice! One comment:

If you could put a check before you set the LINEWIDTH, in case there are objects that doesn't have that property (e.g. image, lighting, etc). I can use this to magnify image files.

03 Mar 2006 Brett Shoelson

I echo Jiro's suggestion, as well as the group consensus that this is a very nice function!

09 Mar 2006 Shanrong Zhang

Great job! MATLAB should add it as a standard icon in their figure panel...

One small comment: if you could add one sentence "figure(f1);" after the first sentence "if (nargin == 0), f1 = gcf; end;", it should be more convenient. By doing this, the figure that is selected by user or the current one would automatically pop up to be "magnified".

Thanks for sharing !!!

14 Mar 2006 Lee Jay Fingersh

Very nice app, thank you! I modified the controls slightly. Now, the arrow keys control magnification in each axis separately while the brackets control both together and the +/- keys control window size.

14 Mar 2006 Daphne W

This is an excellent tool! Thanks!
For those who needed it to work with images just comment out the line with LineWidth:
% set(get(a2,'Children'),...
% 'LineWidth', 2);
That solves the problem.

What I am trying to figure out now, is how to make it work inside a gui with several axes. Seems to put the magnified image at the edge of the gui for some reason. Any ideas?

31 Mar 2006 Meche Nova

I've solved this problem by setting up Units to "normalized". Works fine with several axes within one gui. Question:
how to delete a leftover window if you
occasionally hit the right mouse button?

05 Jun 2006 Gadget Gadget  
05 Jun 2006 Yvgeny Shvarzman

If anybody can tell me if I can use this code too magnify other programs (for examle power point details) ?
Thanks

22 Jun 2006 Gordon Dix

Very useful code. Great work!

26 Jul 2006 Dinesh Appya

Excellent

16 Mar 2007 Hyway Yin

Very nice!

24 Mar 2007 Sami Murad

good it is really helpfull

06 Dec 2007 Jim Fallon

Excellent instruction for handling mouse button motion and using 'UserData' in a GUI. Beside learning, it saved hours for development of my own GUI.

Thanks.
J. Fallon

02 Jan 2009 Husam Aldahiyat

Superb, etc.

15 Jan 2009 Martin

This looks extremely useful, anyone seen any problems with it on later versions of MATLAB R2007a? The zoom area is not located over the plot so cannot be seen...

25 Feb 2009 Dharma

This is really awesome.
I am not sure if I am doing it wrong, ctrl+click makes the box stay on fig., how can I remove it if wanted to plot another figure on same axes.

10 Mar 2009 Lissa  
19 Mar 2009 Lissa  
23 Mar 2009 Akshay

Neat!! Thanks a lot!

24 May 2009 mohamed Elmorsy

Excellent,Wonderful Function

03 Jul 2009 Todd Welti

I also like it, BUT doesn't seem to work well when the x axis is log based. This is pretty much all I use (frequency is normally plotted this way). I looked at the code but not sure how long it would take me to make that mod.....

10 Jul 2009 qooroo

great app, but it deletes one set of data when I use it to look at plotyy graphs. a point for consideration?

-qooroo

28 Sep 2009 Bahram

Excellent job. I guess it needs another revision to take care of some of the bugs that reveal themselves in the newer version of Matlab.

I use this function with imshow() and it gives me an error that:

There is no 'LineWidth' property in the 'image' class.
Error in ==> magnify>ButtonDownCallback at 39
   set(get(a2,'Children'), ...

Of course I could easily solve it by removing that line of code. Also the Ctrl key seems to leave the box on the image. Another thing that one might want to change is to set the XTick and YTick of the second axis to [ ]:

set(a2, 'XTick', [ ], 'YTick', [ ]);

Again, excellent job!

15 Oct 2009 Ted Teng  
29 Dec 2009 Evgeny Pr

Very good function! But there is a slight problem. By operation with the image in function there is an error:

>> imshow(im, []);
>> magnify;
??? Error using ==> set
There is no 'LineWidth' property in the 'image' class.

Error in ==> magnify>ButtonDownCallback at 39
   set(get(a2,'Children'), ...

Thus after an error function continues to work normally at mouse moving.
I think, it is necessary to check that the object on axes is the image and to eliminate in that case change of properties of a line.

29 Dec 2009 Evgeny Pr

I made the following changes to work properly:

 in ==> magnify>ButtonDownCallback at 39
- set(get(a2,'Children'), ...
- 'LineWidth', 2);

+ line_obj = findobj(a2, 'Type', 'line');
+ if ~isempty(line_obj)
+ set(line_obj, 'LineWidth', 2);
+ end

Please login to add a comment or rating.
Tag Activity for this File
Tag Applied By Date/Time
data exploration Rick Hindman 22 Oct 2008 07:32:22
graphics Rick Hindman 22 Oct 2008 07:32:22
magnify Rick Hindman 22 Oct 2008 07:32:22
magnifying glass Rick Hindman 22 Oct 2008 07:32:22
zoom Rick Hindman 22 Oct 2008 07:32:22
magnifying glass Felix Mueller 19 Sep 2009 13:15:54
 

MATLAB Central Terms of Use

NOTICE: Any content you submit to MATLAB Central, including personal information, is not subject to the protections which may be afforded information collected under other sections of The MathWorks, Inc. Web site. You are entirely responsible for all content that you upload, post, e-mail, transmit or otherwise make available via MATLAB Central. The MathWorks does not control the content posted by visitors to MATLAB Central and, does not guarantee the accuracy, integrity, or quality of such content. Under no circumstances will The MathWorks be liable in any way for any content not authored by The MathWorks, or any loss or damage of any kind incurred as a result of the use of any content posted, e-mailed, transmitted or otherwise made available via MATLAB Central. Read the complete Terms prior to use.

Contact us at files@mathworks.com