gpt4 book ai didi

Matlab - 直方图边缘和切断

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:33 28 4
gpt4 key购买 nike

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

所以我想创建一个直方图,在柱的开始/结束处使用 bin 刻度。有 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 处截止,如示例所示?最好在 0.6 处插入示例的“lambda 箭头”(但可选)。

最佳答案

编辑 3 和 4:由于您使用的是 Matlab R2013b,它没有直方图,因此请使用 hist 的 number-of-bins 语法 绘制:

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

请注意,这会返回容器的中心,而不是边缘。对于箭头,您可以使用 annotation如果 R2013b 支持的话。或者(有点骇人听闻):

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

编辑 2:尝试

xint=1/15;
edges_in=(0:xint:1);
histogram(data,edges_in);

直接绘制,而不是使用barThis post MathWorks 表示 bar()histc 选项已弃用。


使用histcounts代替histc:

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

根据 histc docs ,“最后一个 bin 由等于 binranges 中最后一个值的标量值组成。”所以最后一个 bin 只是 1.0。相比之下,histcounts , "最后一个 bin 也包含右边的 bin 边缘,因此它包含 X(i) 如果 edges(end-1) ≤ X(i) ≤ edges(end)"那应该做你想做的。

我在上面添加了一个来收紧情节,但为了调试而将其关闭,以便您可以查看最后一个柱状图是否仍然存在。

编辑根据histcounts docs ,返回的向量比边向量少一个元素。如果是这种情况(根据编辑代码中的 size 打印输出),则应将其删除,这样 bar 就不会绘制该条。

关于Matlab - 直方图边缘和切断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33805876/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com