我有多个直方图,我想叠加在一起,但我不知道该怎么做。我找到了下面的代码,但我不知道如何修改它以在循环上运行而不是仅仅两个直方图。
data1 = randn(100,1); % data of one size
data2 = randn(25, 1); % data of another size!
myBins = linspace(-3,3,10); % pick my own bin locations
% Hists will be the same size because we set the bin locations:
y1 = hist(data1, myBins);
y2 = hist(data2, myBins);
% plot the results:
figure(3);
bar(myBins, [y1;y2]');
title('Mixed size result');
或者如果直方图超过10或20,那么比较直方图的更好方法是什么。
答案 0 :(得分:2)
你的问题非常笼统。首先,我不明白为什么你坚持使用for循环。
我个人不喜欢附带的条形图。它很快变得混乱(特别是因为酒吧不在“原始”位置)
如果你有很多直方图,我会考虑一个stairstep的情节,因为它没有如此多地填充情节区域。或者你可以拿出自己的 - 例如使用透明补丁。
如果它有很多曲线,有许多方法可以将谷歌视觉化为“多变量可视化”并且令人惊讶。其中一个最有趣的方式是Chernoff faces。
答案 1 :(得分:1)
histogram(data1, myBins);
hold on;
histogram(data2, myBins);
答案 2 :(得分:0)
您可以执行以下操作,但这不是唯一的方法:
data = cell(1, N);
y = cell(1, N);
yBar = zeros(N, 10);
for i=1:N
data{1, i} = randn(10*round(rand(1,1)), 1);
y{1, i} = hist(data{1, i}, myBins);
yBar(i, :) = y{1, i};
end
yBar = yBar';
figure(3);
bar(myBins, yBar);
title('Mixed size result');
使用y cell当然不是强制性的,我把它留在那里实际显示正在发生的事情。
答案 3 :(得分:0)
我会建议这个。它很简单,不需要for
循环:
bar([y1.' y2.'],'stacked')
答案 4 :(得分:0)
这是一种对我有用的方式:
我正在为矩阵ao
的每一列绘制直方图。
代码是:
for i = 1:size(ao,2)
[h, y] = hist(ao(:,i), linspace(-5,10,100));
h = i + (0.95./max(h(:))) .* h;
barh(y, h, 'BarWidth', 1, 'BaseValue', i, 'LineStyle', 'none');
hold on;
end
grid;
请注意,只需将barh
更改为bar
即可提供相同的功能,但可以上下而不是左右(即图形逆时针旋转90°)。