随机分布数据的Matlab直方图

标签 matlab histogram curve

我是 matlab 的新手,我已经搜索了一大堆不同的网站,但我没有找到解决方案(至少是一个可以理解的解决方案)。

我有一个 290x233 的矩阵,其 double 值范围为 0.1 到 4.7。我想从这个矩阵中的所有数据中生成一个直方图,其中有 0.5 范围内的条形 -> 我希望能够看到在 0 到 0.5 之间,从 0.5 到 1 之间有多少个值等等在...

到目前为止,我设法接近绘制条形图。使用此代码:

bins=[0.25:0.5:4.75];
n2=histc(a_dif_1, bins);
bar(bins,n2,'hist');

我设法得到一个结果,每个箱子内都有一大堆峰(见下图)。这意味着它向我显示了 bin 范围内每个单个值的出现。

enter image description here

然后我发现了“堆叠”选项和使用

bins=[0.25:0.5:4.75];
n2=histc(a_dif_1, bins);
bar(bins,n2,0.8,'stacked','b');

通过这种方式,我至少得到了大条形图,仅显示了 1 个 bin 内出现的总次数(因此下面显示了 10 个矩形条形图)。

enter image description here

现在我想知道这是否是绘制条形图的正确方法,只显示一个 bin 中的值的总量?除此之外,我注意到我的条形图有点偏离垃圾箱的中心(右侧的条形图并不完全位于两个 x 刻度的中间)——我是不是把垃圾箱弄乱了??

作为奖励,我终于想在条形图的顶部画一条曲线。曲线应该以非常概括的方式显示在我之前描述的峰值之后,这样我就可以提供关于除条形之外的数据分布的更详细信息。

感谢您提供各种帮助或想法!

更新

非常感谢您的提示。我将 histc 更改为 hist

bins=[0.25:0.5:4.75]; 
hist(a_dif_1(:), bins)

...而 Matlab 正是我想要的:

enter image description here

最佳答案

a = 0.1;
b = 4.7;
r = a + (b-a).*rand(290,233);
bins=[0.25:0.5:4.75];
hist(r(:))
hist(r(:),bins)

你觉得合适吗?

enter image description here

关于随机分布数据的Matlab直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13307852/

相关文章:

arrays - 将异构变量数组转换为结构的函数(保留名称)

c - 将输出从 C 重定向到 Matlab

java - 如何在jfreechart中用两个系列动态更新HistogramDataset?

r - 将类型 "language"转换为 "expression"

java - 如何获取曲线(形状)的点

python - 使用opencv和python进行激光曲线检测

c++ - MatLab C++ 共享 Dll 库初始化崩溃

Java颜色直方图所有颜色不单独RGB

python - 绘制直方图,使条形高度总和为 1(概率)

matlab - 将视频转换为图像序列 MATLAB