如何自动标准化多个直方图以达到相同的最高水平?

时间:2017-01-11 12:46:59

标签: matlab plot histogram normalization

我有多个直方图,这些直方图是从最终需要组合的各种样本中生成的。我发现我在组合阶段没有得到好的结果,因为不同的图有不同的最大值,但是如果我将它们标准化为有些相似的值,我会得到一个好的结果。

例如以下三个图:

enter image description here enter image description here enter image description here

现在可以看出,其中一个地块在0.067附近达到峰值,而其他两个地块在0.4附近。我无法在这种状态下将它们组合在一起,但在视觉上看到这些情节后,我知道如果我乘以第一个情节0.6我会得到这个:

enter image description here

现在它们处于同一级别,可以一起显示。

我在视觉上对每一个结果都这样做。是否有可能实现自动化?因为它并不总是这样,有时第一和第二输入(绘图)是低的,但第三个输入达到峰值,我将不得不将第三个绘图除以某个值,我知道在视觉上看图之后。

1 个答案:

答案 0 :(得分:3)

Matlabs函数histogram有一些normalization types built in。您可以标准化计数的数量,或直方图区域的总和(请参阅also),...但是您无法对可能的最大值进行标准化。

我建议在不使用histcounts绘图的情况下计算直方图,然后将它们标准化为例如1的公共最大值,然后将它们全部绘制在一起或以条形图分开。

示例:

% generate example data
a = randn(100, 1) + 5;
b = randn(100, 1) * 4 + 8;
nbins = 0:20;

% compute histograms
[na, edges] = histcounts(a, nbins);
centers = mean([edges(1:end-1);edges(2:end)]);
nb = histcounts(b, nbins);

% normalize histograms to maximum equals 1
na = na / max(na);
nb = nb / max(nb);

% plot as bar plots with specified colors (or however you want to plot them)
figure;
bar_handle = bar(centers', [na',nb']);
bar_handle(1).FaceColor = 'r';
bar_handle(2).FaceColor = 'g';
title('histogram normalized to max');

看起来像

enter image description here