Проблема, с которой вы столкнулись, заключается в том, что функция ginput
временно перекрывает некоторые обратные вызовы. Один из способов решения этой проблемы - использовать listener
вместо прослушивания нажатия мыши на осях,
function myFunction
% create a figure and an axes
f = figure;
ax = axes( 'parent', f );
% give the axes a title
t = title ( ax, '');
% add a callback to update the title when the mouse is moving
f.WindowButtonMotionFcn = @(a,b)updateTitle ( ax, t );
% add a listener to the user clicking on the mouse
addlistener ( ax, 'Hit', @(a,b)mousePress ( ax, t ) )
end
function updateTitle ( ax, t, str )
% this function updates the title
% 2 input args is from the mouse moving, the 3rd is only passed in
% when the mouoe button is pressed
if nargin == 2; str = ''; end
% get the current point of the axes
cp = ax.CurrentPoint(1,1:2);
% check to see if its in the axes limits
if cp(1) > ax.XLim(1) && cp(1) < ax.XLim(2) && ...
cp(2) > ax.YLim(1) && cp(2) < ax.YLim(2)
% update the string
t.String = sprintf ( '%f,%f %s', cp, str );
else
% if ourside the limits tell the user
t.String = 'Outside Axes';
end
end
% this function is run when the mouse is pressed
function mousePress ( ax, t )
updateTitle ( ax, t, '- Button Pressed' );
end
Это потребует некоторого рефакторинга вашего кода, но это мощный метод, который знакомит вас со слушателями.
Изображение при движении мыши:
Изображение при нажатии мыши: