matlab Histogram函数显示统计数值
histogram函数的调用方式简洁明了,直接
histogram(data)
即可出图
例如
% 创建示例数据
data = randn(1000, 1);
% 绘制直方图
histogram(data);
结果如下图
不过直方图上面没有显示频数,不太直观
可以通过如下方式将频数添加到直方图上方
代码如下
% 创建示例数据
data = randn(1000, 1);
% 绘制直方图
histogram(data);
% 获取直方图的边缘和频次值
[counts, edges] = histcounts(data);
% 在每个直方的顶部显示频次值
for i = 1:numel(counts)
text(edges(i), counts(i), num2str(counts(i)), 'HorizontalAlignment', 'center', 'VerticalAlignment', 'bottom')
end
上述代码首先使用histogram函数绘制直方图,然后使用histcounts函数获取每个直方的边缘和频次值。接下来,使用text函数在每个直方的顶部显示频次值。text函数用于在指定的坐标位置添加文本,我们将频次值作为文本显示,并将其水平对齐方式设置为居中,垂直对齐方式设置为底部,以确保文本显示在直方的顶部。
结果如下图
细心地小伙伴可以发现,即使我们将对对齐方式参数’HorizontalAlignment’设置成了居中,但是频数还是不是那么居中。
那是因为我们的频数是基于每个bar的边缘而言的,不是对整个bar而言的,随意数字相对于边缘其实已经居中了。
如果想让数字显示在每个bar的正中间,需要在text的参数里,在边缘参数edges的基础上加上每个bar的宽度的一半即可
代码如下:
% 创建示例数据
data = randn(1000, 1);
% 绘制直方图
histogram(data);
% 获取直方图的边缘和频次值
[counts, edges] = histcounts(data);
offset = diff(edges)/2;
% 在每个直方的顶部显示频次值
for i = 1:numel(counts)
text(edges(i)+offset(i), counts(i), num2str(counts(i)), 'HorizontalAlignment', 'center', 'VerticalAlignment', 'bottom')
end
也即添加了第8行计算每个bar的宽度的变量
然后在text中的edges(i)上加上对应的量,即可实现将数值放置在bar的中间。
结果如下