2

複数のヒストグラムを重ね合わせたいのですが、その方法がわかりません。以下のコードを見つけましたが、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 ループを主張する理由がわかりません。

個人的には、含まれている棒グラフが好きではありません。すぐに乱雑になります (特にバーが「元の」場所にないため)

ヒストグラムがたくさんある場合は、プロット領域をあまり埋めないので、階段状のプロットを検討します。または、透明なパッチを使用するなど、独自のものを考え出すこともできます。

曲線がたくさんある場合は、それらを視覚化する方法がたくさんあります。Google で「多変量視覚化」を検索して驚かせてください。最も面白い方法の 1 つは、チェルノフの顔です。

于 2013-05-13T10:55:05.070 に答える
1

今でははるかに簡単です:

histogram(data1, myBins);
hold on;   
histogram(data2, myBins);
于 2016-01-25T05:07:53.337 に答える
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 に答える
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° 回転させます)。

于 2014-09-10T03:47:19.893 に答える