编辑: 好的,我通过阅读旧的问题自己找到了答案。对于我的问题表示歉意!使用以下代码:
Y = rand(10,1);
C = hist(Y);
C = C ./ sum(C);
bar(C)
将随机数据替换为相应的数据就可以正常工作了。现在只需要优化箱子大小。
你好,我知道你一定会觉得这个问题已经被问了上千遍。在某种程度上,你可能是对的,但我在这里找到的帖子中没有找到我特定问题的答案,所以我觉得我最好还是问一下。我会尽可能清楚地表达,但如果我的意图不明显,请告诉我。
好吧,我有一个向量(行)具有5000个元素,所有元素都是整数。现在我想做的是绘制这5000个元素的直方图,但是以这样的方式进行绘制,y轴显示在该特定箱子中的概率,而x轴仍然是普通的,因为它显示该特定箱子的值。
现在,对我来说有意义的是标准化所有内容,但是这似乎不起作用,至少不是我正在做的方式。
我的第一次尝试是
sums = sum(A);
hist(sums/trapz(sums),50)
我省略了其余的内容,因为它从某个文件中导入了大量数据,这并不重要。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中的机会。将两者结合也不起作用。如果答案非常明显,我表示歉意,我只是看不到它。
编辑:虽然我意识到这是一个单独的问题(已经被问了无数次),但我手动选择了bin大小,直到它看起来很好,就是直方图中没有缺失的条形。我见过几个不同的脚本,可以优化bin大小,但遗憾的是,它们中的任何一个似乎都不能在每种情况下制作出“最佳”的直方图 :( 如果所有数字都是整数,有没有简单的方法来选择大小?
ksdensity
)的直方图替代方法,并且存在算法来选择最佳的“箱宽”(在该上下文中称为带宽)。 - A. Donda