我尝试使用不同的数据或多或少地复制以下 p - 值密度直方图:
所以我想在条形的开头/结尾创建一个带有刻度线的直方图。有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');
这给了我:
但是,如果数据等于1,则当前代码在1之后绘制一个新的条形。我想我需要包括边缘(以获得与示例相同),但我似乎无法找到正确的命令?
另外,如何在x = 1处切断直方图,就像示例一样?插入" lambda箭头" 0.6的例子是优选的(但是可选的)。
答案 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,"最后一个bin包含的标量值等于binranges中的最后一个值。"所以最后一个bin只有1.0。相比之下,使用histcounts
,"最后一个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
不会绘制该条形图。