Matlab - 直方图边缘和截断

时间:2015-11-19 13:54:24

标签: matlab histogram

我尝试使用不同的数据或多或少地复制以下 p - 值密度直方图:[p-values histogram example]

所以我想在条形的开头/结尾创建一个带有刻度线的直方图。有15个条,值从0到1,包括1。

目前我正在使用histc命令:

xint=1/15;
edges=(0:xint:1);
[n,bin]=histc(data,edges);
bar(edges,n,'histc');
tit='p-values histogram';
htitle=title(tit);
set(htitle,'fontname','Calibri')
xlabel('p-values');
ylabel('Frequency');

这给了我: My code

但是,如果数据等于1,则当前代码在1之后绘制一个新的条形。我想我需要包括边缘(以获得与示例相同),但我似乎无法找到正确的命令?

另外,如何在x = 1处切断直方图,就像示例一样?插入" lambda箭头" 0.6的例子是优选的(但是可选的)。

1 个答案:

答案 0 :(得分:3)

编辑3和4 :由于您使用的是没有histogram的Matlab R2013b,因此请使用{{1}的bin-number数组语法绘图:

hist

请注意,这会返回垃圾箱的中心,而不是 edge 。对于箭头,如果R2013b支持,则可以使用annotation。或者(有点hackish):

[n, centers] = hist(data, 15)

编辑2 :尝试

line([0.6 0.6], [1750 1250])
plot(0.6, 1250, 'Marker, 'v')
text(0.6, 1750, '\lambda', 'HorizontalAlignment','center', 'VerticalAlignment','bottom')

直接绘图,而不是使用xint=1/15; edges_in=(0:xint:1); histogram(data,edges_in); 。来自MathWorks的This post表示bar histc选项已被弃用。

使用bar()代替histcounts

histc

根据histc docs,&#34;最后一个bin包含的标量值等于binranges中的最后一个值。&#34;所以最后一个bin只有1.0。相比之下,使用histcounts,&#34;最后一个bin还包含正确的bin边缘,因此如果xint=1/15; edges_in=(0:xint:1); [n,edges_out]=histcounts(data,edges_in); % <-- changed size(n) size(edges_in) size(edges_out) bar(edges_out(1:end-1),n,'histc'); % <-- changed - last bin edge shouldn't be included tit='p-values histogram'; htitle=title(tit); set(htitle,'fontname','Calibri') xlabel('p-values'); ylabel('Frequency'); axis([0 1 0 2500]); % <-- added - but leave it off for debugging 它包含X(i)。&#34;那应该做你想要的。

我在上面添加了一个edges(end-1) ≤ X(i) ≤ edges(end)以收紧情节,但请将其关闭以进行调试,以便查看最后一个条是否仍在那里。

编辑根据histcounts docs,返回的向量比边向量少一个元素。如果属于这种情况(根据已修改代码中的axis打印输出),则应将其删除,以便size不会绘制该条形图。