我开发了一个Matlab GUI,可以将数据从表格绘制成直方图。
我希望能够单击一个bin,并从表中提取与该bin中的数据相对应的行。当使用数据游标时,单击一个bin将显示bin中心和边缘以及bin计数。我认为必须有一种方法来返回分组在这些箱子中的实际数据。
我已经研究过ginput,但我不确定这是否是正确的轨道,或者我如何使用它来为我的利益。
任何建议或指导是感激的!
示例表:
'Col1' 'Col2' 'Col3'
Name1 1 Thing1
Name2 5 Thing2
Name3 2 Thing3
Name4 1 Thing4
Name5 8 Thing5
Name6 10 Thing6
示例代码:
data = table.Col2;
hist(data); %histogram defaults to 10 bins
我希望能够主动单击直方图中的bin,并将相应的行存储到另一个表中。
因此,对于上面的数据,直方图中的第一个bin包含表中的第1行和第4行-一旦我单击该bin,我希望看到它存储在另一个表中:'Col1' 'Col2' 'Col3'
Name1 1 Thing1
Name4 1 Thing4
如果我单击任何其他箱子,也会发生同样的情况,它们各自的数据应该存储到表中。
实际数据是几百行和多个其他列。Col2中的数据都是数字,但不一定是整数。
您可以将图形的ButtonDownFcn
属性设置为一个函数,该函数将获得具有X坐标的CurrentPoint
。
set(gcf,'ButtonDownFcn',@your_bd_function)
(当然,您可以使用任何数字句柄代替gcf
)
然后在函数
中curpnt = get(gca,'CurrentPoint'); % returns [x y] vector where you clicked
(这里再次使用适当的轴句柄)
如果每个箱子有一个值,并且是整数,那么剩下的就很简单了:
out = atable(data==round(curpnt(1)),:);
对于更复杂的情况,您需要找到箱子的边界并相应地选择数据。如果将hist中的数据返回为[y,x] = hist(data,bin);