【问题标题】:MATLAB - histograms of equal size and histogram overlapMATLAB - 大小相等的直方图和直方图重叠
【发布时间】:2014-02-04 19:52:01
【问题描述】:

我多次遇到的一个问题是想要获取两个相似的数据集并从它们创建直方图,其中 bin 相同,以便轻松计算直方图重叠之类的东西。

您可以使用

定义 number 个 bin(显然)
[counts, bins] = hist(data,number_of_bins)

但是没有一种明显的方法(据我所知)使几个不同数据集的 bin 大小相等。如果还记得我最初寻找似乎有相同问题但没有好的解决方案的各种人时。

【问题讨论】:

  • 你不是在描述histc吗? hist 基于 histc。此外,您可以将hist 与数据列一起使用以对其进行矢量化,例如hist(rand(1e3,3))
  • 我的意思是,当然,如果您喜欢简单、快速和强大的解决方案,但是当您可以花费更多的精力和时间加上可能会引入偏见的启发式方法时,谁愿意这样做!?跨度>

标签: matlab histogram


【解决方案1】:

正确、简单的方法

正如 horchler 所指出的,这可以很容易地使用histc(它允许您定义您的 bin 向量)或将您的直方图输入向量化为 hist 来实现。

错误,愚蠢的方式

我在下面留下来提醒其他人,即使是愚蠢的问题也能产生有价值的答案

我已经使用以下方法一段时间了,所以认为它可能对其他人有用(或者,有人可以很快指出正确的方法!)。

一般方法依赖于 MATLABhist 函数在样本中的最大值和最小值之间定义等间距的 bin 数量这一事实。因此,如果您将一个开始(最小)和结束(最大)值附加到您的各种样本,这是 所有 感兴趣样本的最小值和最大值,这会强制直方图范围对于您的所有数据集。然后,您可以截断第一个和最后一个值以重新创建原始数据。

例如,创建如下数据集

A = randn(1,2000)+7
B = randn(1,2000)+9

[counts_A, bins_A] = hist(A, 500);
[counts_B, bins_B] = hist(B, 500);

对于我的特定数据集,我得到以下结果

 bins_A(1)   % 3.8127  (this is also min(A) ) 
 bins_A(500) % 10.3081 (this is also max(A) )
 bins_B(1)   % 5.6310  (this is also min(B) )
 bins_B(500) % 13.0254 (this is also max(B) )

要创建相等的分箱,您可以简单地首先定义一个比这两个范围略小的最小值和最大值;

topval = max([max(A) max(B)])+0.05;
bottomval = min([min(A) min(B)])-0.05;

0.05 的加法/减法基于对值范围的了解 - 您不希望额外的 bin 与实际范围太远或太接近。话虽如此,对于本示例,通过使用联合最小/最大值,此代码将不管生成的 A 和 B 值如何工作。

现在我们重新创建直方图计数和 bin 使用(注意额外的 2 个 bin 用于我们新的最大值和最小值)

[counts_Ae, bins_Ae] = hist([bottomval, A, topval], 502);
[counts_Be, bins_Be] = hist([bottomval, B, topval], 502);

最后,您截断第一个和最后一个 bin 和 value 条目以准确地重新创建原始样本

bins_A = bins_Ae(2:501)
bins_B = bins_Ae(2:501)
counts_A = counts_Ae(2:501)
counts_B = counts_Be(2:501)

现在

bins_A(1)     % 3.7655
bins_A(500)   % 13.0735
bins_B(1)     % 3.7655
bins_B(500)   % 13.0735

从此您可以轻松地再次绘制两个直方图

bar([bins_A;bins_B]', [counts_A;counts_B]')

还可以轻松绘制直方图重叠

bar(bins_A,(counts_A+counts_B)-(abs(counts_A-counts_B)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 2012-11-02
    相关资源
    最近更新 更多