View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from

5.0 | 26 ratings Rate this file 36 Downloads (last 30 days) File Size: 11.5 KB File ID: #4179 Version: 1.3




20 Nov 2003 (Updated )

Allows graphical objects to be dragged in a figure.

Editor's Notes:

This file was selected as MATLAB Central Pick of the Week

| Watch this File

File Information

This function enables a graphical object (be it a line, plot, patch, rectangle, text box, etc.) to be dragged inside an axis, with a very simple syntax ("draggable(h)"), following or not horizontal, vertical or diagonal constraints. Limits can be imposed on the object's movement.

Some figure properties are changed by the function, but previous properties are restored as soon as the drag is stopped. The behavior of the object can be reverted to its original, non-draggable state, by issuing "draggable(h,'off')".

Typical uses of this function would include non-standard GUI elements, such as markers that are moved on a figure or image. A function which is called when the object is moved can be provided as an optional argument, so that the movement triggers further actions.

See the provided file dragdemo.m for usage examples.


This file inspired Enhanced Dicom Viewer, Add An Roi Toolbar To Your Figure, Imdisp (Enhanced Version), Draggable Rect, Roitool, and Digitize07.

MATLAB release MATLAB 6.5 (R13)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (30)
28 Sep 2016 Bharath


19 Apr 2016 Aldi Wijaya

Excellent Work, thanks Francois

01 Apr 2016 Yang Yu

01 Dec 2015 Samarth Vadia

17 Jul 2015 Francois Bouffard

Armindo: this is possible by changing the axes limits (using xlim and ylim) inside the callback function provided as a parameter. I'm trying to make a demo but doing it so that it's not confusing to the user (e.g. axes panning too fast) requires care.

Comment only
17 Jul 2015 Armindo

Very nice...

would be possible to drag an object horizontally while updating the axes 'xlim' property.

Basically I need to be able to drag a patch and while iam doing that when Iam near de limits of the plot the plot adjust the limits so I can still be able to drag...

Can you help me on this please

Comment only
04 Apr 2015 Sergei Paleichuk

26 Mar 2015 Manuel

Manuel (view profile)

05 Mar 2015 liu

liu (view profile)

20 Feb 2015 samfort

28 Dec 2014 Massimo Ciacci

Massimo Ciacci (view profile)

Well written, and plenty of demos... I am speechless, exactly what i was looking for!

More precisely I loved how accurate and concise are both the demo code and the function itself! Well done!

23 Nov 2014 Scott

Scott (view profile)

I had to create an account and a community profile to rate this. This is simply awesome! Thank you Francois!

06 Nov 2014 Timo Dörsam

30 Oct 2014 Yi Sui

Yi Sui (view profile)

19 Jul 2013 Jaroslaw Tuszynski

This function allows me to place comment boxes on the plot and manually adjust them before inserting in presentation

11 Jan 2013 Shahab

Shahab (view profile)

Excellent, tahnks

10 Jan 2013 Francois Bouffard

Shaun's problem should be fixed now; I instead simply used fgh = gcbf; -- it should work in all situations. Thanks to Esmerald Aliai for pointing out a similar bug.

Comment only
03 Jul 2012 Sebastian Holmqvist

02 Mar 2012 Shaun

Shaun (view profile)

I love it, and I use it all the time.
One mod I have made for axes which live inside UICONTAINERS...

fgh = get(axh,'Parent');
while ~strcmp(get(fgh,'Type'),'figure')
fgh = get(fgh,'Parent');

13 Jan 2012 Francois Bouffard

Sorry for the years-long delay since the last update... The Jan 13 update contains a bug fix by G. Fortin and Steven Bierer's drag-end function call. I'll try to add Brett's suggestion shortly.

Comment only
12 Jan 2012 Brett Shoelson

Brett Shoelson (view profile)

Most excellent work...rock solid!

17 Aug 2009 Steven Bierer

An excellent, deviously simple tool. The code is well commented, and I was easily able to modify it to include a new input argument: a function handle that executes AFTER the object has been dragged. (I will contact the author with this addition, in case he'd like to incorporate it.)

31 Mar 2009 Florian Jousset

I used it to move text, and it worked well after adapting your code to objects having a "Position" property of 3 values.

23 Oct 2008 Nathan Tomlin

Wow, amazingly well done!

02 Oct 2007 Chris Sarantos

Excellent, just what I was looking for!

13 Jul 2007 Paul Premakumar

Very handy file!

04 Feb 2006 Tom Nagel

I love it because it learns me a lot about mousebutton handling.
I tried to make a text object draggable: that doesn't work!

20 Jun 2005 w L

31 Aug 2004 Laszlo Balkay

It is a really great work with impressive options.


23 Dec 2003 Ohad Gal

Well done.
you might want to add an option for the following:
1. force a movement of the object, using an outside calling function.
2. enable the user to choose it's rendering mode
3. export (and update a given edit box) the DX and DY movement of the object

anyways, It's great. thanks you !


24 Nov 2003

Changed the category from "GUI tools and examples" to more accurate "Graphics: Graphical Data Exploration and Interaction".

15 Jan 2004

- Changed the category from "GUI tools and examples" to more accurate "Graphics: Graphical Data Exploration and Interaction".
- Now distributing .zip archive containing both draggable.m and a demo function, dragdemo.m.

19 Feb 2004

- Bugfix: now works with 1-element plot and line objects
- Added: polygon with draggable vertices in as demo 'polymove' in dragdemo

04 Mar 2004

- Bugfix: sanitized movement computation.
- The 'snapgrid' demo has been simplified.
- The 'polymove' demo has been polished.

05 Mar 2004

- Bugfix: yet another correction to movement computation. Now behaves correctly when mouse is out of axes.

13 Jan 2012 1.1

implemented a feature and fixed a bug (both user-suggested)

20 Jan 2012 1.2

Major update. Now supports text objects. Diagonal constraints with arbitrary slopes added. Single call for applying draggable on multiple objects sharing the same parameters supported. Added the 'sliders' demo in dragdemo. General cleanup.

10 Jan 2013 1.3

This update fixes a bug found by Esmerald Aliai in which draggable would not work for axes embedded in Panels. In fact this should also fix Shaun's bug mentioned in March 2012.

Contact us