2

我有多个直方图,我想将它们叠加在一起,但我不知道该怎么做。我找到了下面的代码,但我不知道如何修改它以在循环上运行,而不仅仅是两个直方图。

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,那么比较直方图的更好方法是什么。

4

5 回答 5

2

你的问题很笼统。首先,我不明白您为什么坚持使用 for 循环。

我个人不喜欢包含的条形图。它很快变得混乱(特别是因为酒吧不在“原始”位置)

如果您有很多直方图,我会考虑使用阶梯图,因为它不会过多地填充绘图区域。或者你可以想出你自己的——例如使用透明补丁。

如果它有很多曲线,有很多方法可以将它们可视化谷歌“多元可视化”并感到惊讶。最有趣的方式之一是切尔诺夫面孔

于 2013-05-13T10:55:05.070 回答
1

现在容易多了:

histogram(data1, myBins);
hold on;   
histogram(data2, myBins);
于 2016-01-25T05:07:53.337 回答
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;

请注意,仅更改barhbar将给出相同的结果,但会上下而不是左右(即图形逆时针旋转 90°)。

于 2014-09-10T03:47:19.893 回答
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 单元格不是必须的,我把它留在那里是为了实际显示正在发生的事情。

于 2013-05-13T10:23:14.063 回答
0

我会建议这个。它很简单,不需要for循环:

bar([y1.' y2.'],'stacked')
于 2013-08-02T11:45:15.133 回答