How to get heatmap values in appdesigner?

11 次查看(过去 30 天)
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 个评论
Csanad Levente Balogh
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 2021-8-13
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.

请先登录,再进行评论。

采纳的回答

Dave B
Dave B 2021-8-13
编辑:Dave B 2021-8-13
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 个评论
Adam Danz
Adam Danz 2021-8-13
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.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Data Distribution Plots 的更多信息

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by