标准化直方图并在matlab中使y轴以百分比表示

时间:2014-01-11 13:47:25

标签: matlab histogram

编辑: 好吧,所以我回答了我自己的问题,通过阅读更老的问题。我为提问而道歉!使用代码

Y = rand(10,1);
C = hist(Y);
C = C ./ sum(C);
bar(C)

用相应的数据代替随机数据工作正常。现在只需要优化箱子大小。

美好的一天, 现在我知道你一定是在想这已被问了一千次。在某种程度上,你可能是对的,但是我找不到我在这里找到的帖子中的具体问题的答案,所以我想我也可以问一下。我会尽量保持清醒,但请告诉我是否不明白我想做什么

好吧,所以我有一个包含5000个元素的(行)向量,所有这些都只是整数。现在我要做的是绘制这5000个元素的直方图,但是这样的方式使得y轴有机会进入某个特定的bin,而x轴仍然是常规的,就像它给出了特定箱子的价值。

现在,对我来说有意义的是将一切正常化,但这似乎不起作用,至少我是怎么做的。

我的第一次尝试是

sums = sum(A);
hist(sums/trapz(sums),50)

我省略了其余部分,因为它从某个文件中导入了大量数据,这并不重要。 sums = sum(A)工作正常,我可以看到matlab中的向量。 (我该怎么称呼它,控制台?)。但是,用trapz除以区域只会改变我的x轴,而不是我的y轴。一切都变得非常小,大约10 ^ -3,而它应该是10的数量级。

现在环顾四周,有人建议使用

hist(sums,50)
ylabels = get(gca, 'YTickLabel');
ylabels = linspace(0,1,length(ylabels));
set(gca,'YTickLabel',ylabels); 

虽然这确实使y轴从0变为1,但它根本没有标准化。我希望它能真正反映出进入某个垃圾箱的可能性。将两者结合起来也行不通。如果答案非常明显,我道歉,我只是不明白。

编辑:虽然我意识到这是一个单独的问题(已被问过一百万次),但我只是手工挑选的箱子大小,直到它看起来不错,就像直方图中没有条形码一样。我已经看到了几个不同的脚本应该优化bin大小,但是它们似乎都没有在每种情况下制作出“最佳”的直方图,遗憾的是:(如果所有数字都是,那么有没有一种简单的方法来选择大小整数?

1 个答案:

答案 0 :(得分:8)

(只是为了结束这个问题)

直方图是绝对频率图,因此所有bin频率之和(hist函数的输出向量之和)始终是其输入向量中的元素数。因此,如果您想要一个百分比输出,您需要做的就是将输出中的每个元素除以该总数:

x = randn(10000, 1);
numOfBins = 100;
[histFreq, histXout] = hist(x, numOfBins);
figure;
bar(histXout, histFreq/sum(histFreq)*100);
xlabel('x');
ylabel('Frequency (percent)');

enter image description here

如果要重建数据的概率密度函数,则需要考虑直方图的bin大小并将频率除以:

x = randn(10000, 1);
numOfBins = 100;
[histFreq, histXout] = hist(x, numOfBins);
binWidth = histXout(2)-histXout(1);
figure;
bar(histXout, histFreq/binWidth/sum(histFreq));       
xlabel('x');
ylabel('PDF: f(x)');
hold on
% fit a normal dist to check the pdf
PD = fitdist(x, 'normal');
plot(histXout, pdf(PD, histXout), 'r');

enter image description here


<强>更新

自MATLAB R2014b以来,您可以使用&#39;直方图&#39;命令可以轻松生成具有各种标准化的直方图。例如,以上内容变为:

x = randn(10000, 1);
figure;
h = histogram(x, 'normalization', 'pdf');
xlabel('x');
ylabel('PDF: f(x)');
hold on
% fit a normal dist to check the pdf
PD = fitdist(x, 'normal');
plot(h.BinEdges, pdf(PD, h.BinEdges), 'r');

enter image description here