首页 > 解决方案 > 如何从不同大小的矩阵生成堆叠直方图?

问题描述

我有两个不同大小的矩阵,一个是3000 x 1另一个6000 x 1。我想从这些矩阵中绘制一个堆积直方图。这是我到目前为止尝试过的代码:

hist(S1,20);
hold on
hist(S,20)
h = findobj(gca,'Type','patch');
display(h) 
set(h(1),'FaceColor',[0 0 0],'EdgeColor',[1 1 1],'facealpha',1.0);
set(h(2),'FaceColor',[1 1 1],'EdgeColor',[0 0 0],'facealpha',.3);

最后,情节将是这样的,没有堆叠:

图片

标签: matlabhistogram

解决方案


MATLAB 的bar方法有一个'stacked'选项。这无关紧要,如果您的数组具有不同的大小或不同的值范围,只要您创建的直方图具有相同的 x 值。您可以通过正确设置xbins参数来实现。

这是一个小例子:

S1 = randi([-8 8], 30, 1);
S2 = randi([-10 10], 60, 1);

hist_range = -10:10;

h1 = hist(S1, hist_range)
h2 = hist(S2, hist_range)

figure(1);
bar(hist_range, [h1(:), h2(:)], 'stacked')
xlim([-11 11]);
legend('h1', 'h2');

示例输出(Octave 5.1.0,代码也使用 MATLAB Online 进行了测试):

h1 =
   0   0   2   2   3   1   1   0   3   1   3   2   2   0   1   2   3   1   3   0   0

h2 =
   2   2   2   0   4   5   0   2   3   2   5   3   0   6   3   6   2   5   1   5   2

输出

希望有帮助!


推荐阅读