具有对数 bin 和归一化的直方图

Histogram with logarithmic bins and normalized

我想制作矩阵每一列的直方图,但我希望 bins 是对数的并且也被归一化。在我创建直方图后,我想在不显示条形的情况下对其进行拟合。这是我试过的:

y=histogram(x,'Normalized','probability');

这给了我归一化的直方图,但我不知道如何使 bins 对数。

我认为正确的语法是 Normalization。 要使其成为对数,您必须更改轴对象。 例如:

ha = axes;
y = histogram( x,'Normalization','probability' );
ha.YScale = 'log';

创建对数直方图有两种不同的方法:

  1. 计算数据对数的直方图。这可能是最好的方法,因为您让软件决定要创建多少个 bin,等等。 x-axis 现在不匹配您的数据,它匹配您的数据日志。对于拟合一个函数,这可能是有益的,但对于显示它可能会造成混淆。在这里,我更改刻度标记标签以显示实际值,使刻度标记本身保持其原始值:

    y = histogram(log(x),'Normalization','probability');
    h = gca;
    h.XTickLabels = exp(h.XTick);
    
  2. 以对数刻度确定您自己的 bin 边缘。这里需要根据样本的数量和样本的分布来确定需要多少个bin。

    b = 2.^(1:0.25:3);
    y = histogram(x,b,'Normalization','probability');
    set(gca,'XTick',b) % This just puts the tick marks in between bars so you can see what we did.
    

方法 1 让 MATLAB 根据输入数据自动确定 bin 数和 bin 边缘。因此它不适合创建多个匹配直方图。对于这种情况,使用方法 2。可以通过这种方式更简单地获得 in 边:

N = 10;         % number of bins
start = min(x); % first bin edge
stop = max(x);  % last bin edge
b = 2.^linspace(log2(start),log2(stop),N+1);