How to add additional info to the data cursor?

Hello
I'm wondering how I can get extra info (which is not plotted itself) to show on the data cursor of a plot.
Say I have multiple events, and three variables per event (nicely stashed in arrays), e.g. the time of the event, the position and some measured value. Say now that I plot this measured value against the position. Is there some way to also have the time of the event displayed in the data cursor per event?
Thanks in advance.
Lukas
(sorry for the self-bumping)

 Respuesta aceptada

ChristianW
ChristianW el 22 de Mzo. de 2013
Editada: ChristianW el 26 de Mzo. de 2013
function test_main
% Plots graph and sets up a custom data tip update function
fig = figure('DeleteFcn','doc datacursormode');
X = 0:60;
t = (X)*0.02;
Y = sin(-16*t);
plot(X,Y)
dcm_obj = datacursormode(fig);
set(dcm_obj,'UpdateFcn',{@myupdatefcn,t})
function txt = myupdatefcn(~,event_obj,t)
% Customizes text of data tips
pos = get(event_obj,'Position');
I = get(event_obj, 'DataIndex');
txt = {['X: ',num2str(pos(1))],...
['Y: ',num2str(pos(2))],...
['I: ',num2str(I)],...
['T: ',num2str(t(I))]};

7 comentarios

To follow up, for my own use I have a custom datacursor function to display the Index as well. Hopefully this will help you Lukas:
function output_txt = datacursor(obj,event_obj)
% Display the position of the data cursor
% obj Currently not used (empty)
% event_obj Handle to event object
% output_txt Data cursor text string (string or cell array of strings).
pos = get(event_obj,'Position');
idx = get(event_obj, 'DataIndex');
output_txt = {['X: ',num2str(pos(1),4)],...
['Y: ',num2str(pos(2),4)] };
% If there is a Z-coordinate in the position, display it as well
if length(pos) > 2
output_txt{end+1} = ['Z: ',num2str(pos(3),4)];
end
output_txt{end+1} = ['Index: ', num2str(idx)];
end
To use it, define a datacursormode object and set the 'UpdateFcn' callback to your custom function, e.g.,
dcm = datacursormode(gcf);
set(dcm, 'UpdateFcn', @datacursor)
Lukas
Lukas el 25 de Mzo. de 2013
Editada: Lukas el 25 de Mzo. de 2013
Ok, thanks, this is already very useful, it's much easier to have the index instead of having to find it manually. But is there a possibility to then use this index in another vector to have this additional info (stored at that index in the other vector) displayed on the datacursor? Probably I should give this vector to the datacursor function, but I don't think set will be able to handle it then...
ChristianW
ChristianW el 26 de Mzo. de 2013
Answer edited.
Lukas
Lukas el 26 de Mzo. de 2013
That works. Exactly what I was looking for. Thank you very much.
I = get(event_obj, 'DataIndex')
is always 1 for me on MATLAB 2018b - therefore the correct metadata cannot be found.
Julia Jose
Julia Jose el 18 de Feb. de 2020
lifesaver! Works perfectly, thank you!
akhila
akhila el 20 de Sept. de 2023
what is event object and obj ? is it a data we load?

Iniciar sesión para comentar.

Más respuestas (1)

Iann Caio
Iann Caio el 10 de Feb. de 2022

0 votos

Hello .. Good night. Is there any method, where I click on a certain point in the figure, and I want to extract the data from the cursor, and add it to a new program in PROMPT?

Categorías

Más información sobre Creating, Deleting, and Querying Graphics Objects en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 21 de Mzo. de 2013

Comentada:

el 20 de Sept. de 2023

Community Treasure Hunt

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

Start Hunting!

Translated by