How to get heatmap values in appdesigner?

13 Ansichten (letzte 30 Tage)
Csanad Levente Balogh
Csanad Levente Balogh am 23 Feb. 2021
Hi All!
I'm building an app, and I am using heatmap to visualize some data. I am plotting heatmap on a Panel. When I click on a cell of heatmap, it displays X and Y values. For further calculations I want to extract which cell the user clicked on. So what I need basically, is that when the user clicks on one of the heatmap cells fome function registers the coordinates (X,Y values) of the cell that have been clicked on. I don't know if it is possible with heatmap. Maybe there are other plot types with which it is easier to implement. Any solutions or siggestions?
  3 Kommentare
Csanad Levente Balogh
Csanad Levente Balogh am 13 Aug. 2021
Hi!
Thank you! It is not exactly what I was looking for but I might be able to go somewhere from here. What I would need actually sound very easy, still I have not found a solution for it. So for example, if I have a 5X7 matrix visualised with heatmap or an other function, and the user clickes on one of the cells, lets's say the cell in the third row and second column, the answer should be [3 2].
Adam Danz
Adam Danz am 13 Aug. 2021
It would be simple but accessing the datacursor in heatmap is not simple and replacing it with a customizable datatip is still not supported to my knowledge. heatmap is notoriously difficult to customize and it's often necessary to use alternatives such as imagesc or histogram2 or surf to achieve customization.
Dave B's approach below (also see comments under that answer) is a simple alternative.
If you want to stick with heatmap, see methods 4 and 5 in the 2nd link Mario provided.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Dave B
Dave B am 13 Aug. 2021
Bearbeitet: Dave B am 13 Aug. 2021
Is this the sort of thing you're looking for?
h=imagesc(rand(5,7));
h.ButtonDownFcn=@(~,hit)disp(round(hit.IntersectionPoint(1:2)));
Note that this disp is just for testing, you'd probably do something more interesting there, and if it was more than a single line you can just pass in a function (or more likely method on your app) like any other callback.
  6 Kommentare
Adam Danz
Adam Danz am 13 Aug. 2021
Yeah, the euclidean distance to grid centers in my comment (using hypot) isn't necessary and the first two lines in your comment above are more efficient. But since the OP wants to return the indicies rather than the X/YData, the last two lines in your comment above are not needed. Actually, I believe xind and yind are the solutions so it's much easier than my approach.
I also realized that my approach (and this one) isn't reliable for non-uniform grids as I incorrectly claimed in my solution. Imagine clicking within a large grid cell very close to a border and the bordering cell is very narrow. The click location would be closer to the neighboring grid cell center than it would be to the center of the larger cell that contained the click. But this doesn't matter if the user is trying to replicate heatmap since that function does not produce non-uniform grids.
The solution to support non-uniform grids would require pairs of <=, > conditions for x and y coordinates or a more fancy and probably less-efficient point-in-polygon approach.
Csanad Levente Balogh
Csanad Levente Balogh am 9 Okt. 2021
Thank you @Adam Danz and @Dave B, this is exactly what I was lookig for!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Data Distribution Plots finden Sie in Help Center und File Exchange

Produkte


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by