【问题标题】:Matlab GUI: How to return the rows of a table from a histogram binMatlab GUI:如何从直方图箱中返回表的行
【发布时间】:2014-05-07 18:33:05
【问题描述】:

我开发了一个 Matlab GUI,可以将数据从表格绘制成直方图。

我希望能够单击一个 bin 并从表中提取与该 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

如果我单击任何其他 bin,也会发生同样的情况,它们各自的数据应该存储到表中。

实际数据有几百行和多个其他列。 Col2 中的数据都是数字,但不一定是整数。

【问题讨论】:

  • 您应该添加一个简单的数据和代码示例以获得直方图。更容易理解您的问题并提出有效的答案。
  • table 是表对象(然后是坏名)还是结构?此外,最好预定义直方图箱并使用hist(data,bin) 创建它。您是否总是认为每个 bin 都有一个值的数据?
  • 啊,你是对的,我输入那个例子太快了。我将更改示例中的措辞。另外,我确实有预定义的垃圾箱,但我并不担心这个问题。我只需要能够单击垃圾箱并获得可用数据。

标签: matlab user-interface histogram matlab-guide


【解决方案1】:

您可以将图形的 ButtonDownFcn 属性设置为一个函数,该函数将获取带有 X 坐标的 CurrentPoint

set(gcf,'ButtonDownFcn',@your_bd_function)

(当然,您可以使用任何图形句柄来代替gcf。)

然后在函数中

curpnt = get(gca,'CurrentPoint'); % returns [x y] vector where you clicked

(再次在这里使用适当的轴句柄。)

如果每个 bin 有一个值并且它是整数,那么剩下的就很简单了:

out = atable(data==round(curpnt(1)),:);

对于更复杂的情况,您需要找到 bin 的边界并相应地选择数据。如果将 hist 中的数据返回为 [y,x] = hist(data,bin);

会更容易

【讨论】:

  • 谢谢,这是一个好的开始。我肯定有一个更复杂的案例,但我理解你的方法。
  • 忘记对示例中的 x 坐标进行四舍五入,最后一条语句。已更正。
猜你喜欢
  • 1970-01-01
  • 2015-05-15
  • 2018-06-16
  • 2013-07-15
  • 2012-07-06
  • 2013-03-06
  • 2021-10-29
  • 2016-02-21
  • 1970-01-01
相关资源
最近更新 更多