display specific name on a graph with the cursor

Hello, I want to be able to display the name of the dot in a graph according to the vector position.
my code is
function
fig = figure;
a = [1 2 3 4 5]
b = [2 3 4 5 6]
name{1} ='one';
name{2} ='two';
name{3}='tree';
name{4}='four';
name{5}='five';
scatter(a, b, 'filled')
dcm_obj = datacursormode(fig);
set(dcm_obj,'UpdateFcn',@myupdatefcn)
end
function txt = myupdatefcn(empt,event_obj)
pos = get(event_obj,'Position');
nameNumber = 'WantCorrectNameHere';
txt = {['X: ',num2str(pos(1))],...
['Y: ',num2str(pos(2))],...
nameNumber};
end
So I want to have access to the right name at the selected position for exemple for a(1);b(1) -> name{1}

 Accepted Answer

Jan
Jan on 31 Jul 2015
Edited: Jan on 31 Jul 2015
Perhaps the SnapToDataVertex mode is useful?
function
fig = figure;
a = [1 2 3 4 5];
b = [2 3 4 5 6];
name = {'one', 'two', 'three', 'four', 'five'};
DCM_Data.Position = [a; b];
DCM_Data.Title = name;
scatter(a, b, 'filled')
dcm_obj = datacursormode(fig);
set(dcm_obj,'UpdateFcn', {@myupdatefcn, DCM_Data});
end
function txt = myupdatefcn(empt,event_obj, DCM_Data)
pos = get(event_obj,'Position');
[dummy, index] = min(((pos(1) - DCM_Data.Position(1, :)).^2) + ...
((pos(2) - DCM_Data.Position(2, :)).^2));
nameNumber = DCM_Data.Title{index};
txt = {['X: ',num2str(pos(1))],...
['Y: ',num2str(pos(2))],...
nameNumber};
end

2 Comments

Ok, thank you. I used a for loop and checked the positions of my objects compared to the cursor but this strategy is more elegant. Best
Thanks, Bought me out of a trouble so cheap...

Sign in to comment.

More Answers (0)

Categories

Find more on App Building in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!