如何自动归一化多个直方图以达到相同的最大值?
Posted
技术标签:
【中文标题】如何自动归一化多个直方图以达到相同的最大值?【英文标题】:How to automatically normalize multiple histograms to get to the same maximum level? 【发布时间】:2017-05-26 06:33:35 【问题描述】:我有多个从各种样本生成的直方图,最终需要组合。我发现在组合阶段我没有得到好的结果,因为不同的图有不同的最大值,但是如果我将它们标准化为有点相似的值,我会得到一个很好的结果。
例如下面三个图:
现在可以看出,其中一个图的峰值在 0.067
左右,而另外两个在 0.4
左右。我无法在这种状态下将它们组合起来,但是在直观地查看这些图之后,我知道如果我将第一个图相乘 0.6
我会得到:
现在它们处于同一级别,可以一起显示。
我对每个结果都在视觉上这样做。有可能实现自动化吗?由于它并不总是这样,有时第一个和第二个输入(图)很低,但第三个输入达到峰值,我必须将第三个图除以某个值,我在视觉查看图后知道。
【问题讨论】:
通过除法或乘法“归一化”直方图有时会耗尽直方图的某些属性,例如直方图的面积/功率,或部分之间的关系。如果您只想将它们放在同一个图表上,也许plotyy
会在这里有所帮助?
【参考方案1】:
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');
看起来像
【讨论】:
以上是关于如何自动归一化多个直方图以达到相同的最大值?的主要内容,如果未能解决你的问题,请参考以下文章
笔记:错误记录- gdal读取哨兵1雷达数据分贝化数据归一化计算极值为nan,输出相同错误结果
R语言plotly可视化:plotly可视化多个数据集归一化直方图(historgram)并在直方图中添加密度曲线kde(核密度估计的密度曲线density plot)