matlab - 如何从不同大小的矩阵生成堆叠直方图?
问题描述
我有两个不同大小的矩阵,一个是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);
最后,情节将是这样的,没有堆叠:
解决方案
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
希望有帮助!
推荐阅读
- swift - SpriteKit 在跨设备的视图框架内生成对象
- java - 我可以创建一个实体映射到具有来自实体特定属性的名称的表吗?
- javascript - 使用 onclick 交换图像
- javascript - 将项目与视图组件的右侧对齐?
- windows - 我想在批处理文件中使用 for 循环从用户那里获得很多输入
- apache-spark - 按字段对 Spark 数据帧进行重复数据删除
- javascript - 如何在 Javascript 循环中每 N 次迭代休眠一次?
- python - 如何清除使用 Keras 和 Tensorflow(作为后端)创建的模型?
- latex - 如何在简历中将对象放在中上
- f# - 指定要包含在 nupkg 中的依赖项