getmousepos

Returns the mouse position in the figure area.

Syntax

[x, y] = getmousepos()

getmousepos('print', status)

getmousepos('print', status, 'parent', handle)

Inputs

status
If the value is 'on', the mouse position is printed in the Command Window whenever there is a right-mouse click in a figure that has only GUI elements and no axes. This property is useful when building a GUI as both the normalized and pixel positions are printed. If the value is 'off', the mouse position is not printed on right-click.
Type: off_on
handle
Optional input which specifies the handle of a UI element that is used as a parent (reference) when calculating the normalized position printed. If no parent property is given, the current gcf handle is used as a reference. If the mouse position is not contained in the parent handle, the normalized position is [NaN NaN] in the message printed.
Type: double

Outputs

x, y
The position of the mouse.
If the mouse is over a 2D plot, x and y are in the plot's coordinates system, which is defined by the x and y axes.
If the mouse is not over a 2D plot, then x and y are in the figure's coordinate system where the axes exists, and the (0,0) point is in the upper-left corner of the figure window.

Examples

In the following example, getmousepos is used along with the 'mouseclickcallback' property to obtain the mouse position everytime you click on the plot:
close all;
plot(rand(100,1));
set(gca, 'mouseclickcallback',@get_mouse_pos);

function get_mouse_pos(handle, callbackdata)
  [x,y] = getmousepos() 
  callbackdata
end
The next example demonstrates the two coordinate systems. The mouse coordinates are printed in the console as the mouse moves over the figure.
close all;
figure();
subplot(1,2,2);
plot(rand(10,1));

ellipse(gcf,'pos',[0, 0, 20, 20], 'edgecolor', 'r','linewidth',2);

for i=1:100 
  [x,y] = getmousepos()
  pause(1);
end
getmousepos and the 'mouseclickcallback' property are combined in the following example to create new elements in the figure:
clear all, close all;
axes('position',[0,0,0,0]);
set(gca,'mouseclickcallback',@mouseclicked);

function mouseclicked(h,callbackdata)
  [x,y]=getmousepos();
  ellipse(gcf,'pos',[x-10, y-10, 20, 20]) 
end
getmousepos with printing in a figure used for GUI elements only:
getmousepos('print', 'on')
f = gcf();
% Right click in the figure once it is created. The following message will be printed
Mouse position: normalized [0.45 0.44], pixels [307 143], parent [1.000000]
getmousepos('print', 'off')
getmousepos with printing in a figure used for GUI elements only, with a parent reference:
getmousepos('print', 'on')
f = gcf();
% Right click in the figure once it is created. The following message will be printed
Mouse position: normalized [0.45 0.44], pixels [307 143], parent [1.000000]
% Use the normalized mouse position to create a frame inside gcf
frame1 = uipanel(gcf(), 'title', 'Frame1', 'units', 'normalized', 'position', [0.45 0.44 0.5 0.4]);
getmousepos('print', 'on', 'parent', frame1)
% Right click in the parent frame to get the position where a button needs to be created
Mouse position: normalized [0.12 0.38], pixels [348 193], parent [17.819334]
% Use the normalized mouse position to create a button inside parent object
button = uicontrol(frame1, 'style', 'pushbutton', 'string', 'Next', 'units', 'normalized', 'position', [0.12 0.38 0.25 0.18]);
getmousepos('print', 'off')

Comments

If the mouse is not inside the figure area when getmousepos is called, the outputs will be NaN.