Get data point that was clicked on in graph

135 vues (au cours des 30 derniers jours)
Mark Hayworth
Mark Hayworth le 30 Jan 2023
Commenté : Yair Altman le 17 Oct 2024
I have a plot on a GUIDE GUI that gives some measurement made from frames in a video. What my user wants is to click on a point in the plot and display the frame from the video that corresponds to that point in the graph. I was told from Mathworks tech support that this is not possible. But is it really impossible? They told me I could setup a callback function for the graph (axes) and then when I clicked on it I would go into the callback function and I could get the whole XData and YData vectors but I could not get the one point I clicked on, even though it shows up in the graph with the X and Y as data tips. So for example:
x=1:8;
y = rand(1, numel(x));
plot(x, y, 'b.-', 'MarkerSize', 15);
grid on;
And let's say I clicked on the point at x=6. I would go into the callback and be able to get the full 8-element x and y vectors, but the callback function would have no idea where I clicked or what the closest data point to that location is. Is that really true? I find that hard to believe. Is there any easy way to find out what vector element was clicked on? Or do I have to call on the almighty Yair Altman for a favor?

Réponses (1)

Yair Altman
Yair Altman le 30 Jan 2023
At your service :-)
t=0:.01:5; y=sin(t); hPlot=plot(t,y);
hPlot.ButtonDownFcn = @(h,e) disp(e.IntersectionPoint);
Now whenever you click on the plot line, it will display the clicked coordinates [x,y,z]. The event data's IntersectionPoint is a 1x3 vector. Of course, to accept mouse clicks, the plot-line's HitTest property must be set to 'on' (or true).
  5 commentaires
Diptangshu Paul
Diptangshu Paul le 17 Oct 2024
Dear Altman, this is a very simple code, yet a beautiful solution to a big problem. However for my purpose, I need to store these coordinates into a variable. How can it be done?
Yair Altman
Yair Altman le 17 Oct 2024
You can set the ButtonDownFcn callback property value to a handle to a function in your code, and in that function you can access the event's IntersectionPoint in a variable and then use it as you need.
If you need help with this, read the Matlab documentation about using callback functions.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Migrate GUIDE Apps dans Help Center et File Exchange

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by