2013-05-13 121 views
2

我有多個直方圖,我想疊加在彼此之上,但我不知道該怎麼做。我發現了下面的代碼,但我不知道如何修改它以在循環上運行,而不是僅僅運行兩個直方圖。如何覆蓋matlab中的直方圖

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'); 

enter image description here

或什麼是比較直方圖的一種更好的方式,如果他們超過10或20

+2

持有,持有了嗎? – 2013-05-13 10:18:02

+1

在您的代碼中,yBar總是有相同的長度(10),但我應該怎麼做(可能是matlab中的單獨條)(http://stackoverflow.com/questions/16313392/separate-bars-in-matlab) – Shai 2013-05-13 11:25:17

回答

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單元格並不是強制性的,我把它留在那裏來實際展示發生了什麼。

+0

如果情況並非如此。我每次都會改變...... – Kiarash 2013-05-13 10:50:38

2

你的問題很一般。首先,我不明白你爲什麼堅持一個for循環。

我個人不喜歡包含的條形圖。它很快變得混亂(特別是因爲酒吧不在「原始」的位置)

如果你有很多的直方圖,我會考慮一個stairstep情節,因爲它不會填滿劇情區太多。或者你可以拿出你自己的 - 例如使用透明的補丁。

如果它獲得了很多曲線,有很多方法可以將它們可視化爲Google的「多變量可視化」並且很驚訝。其中最有趣的方式是Chernoff faces

+0

我只是有一堆細菌隨時間流逝的速度。並且每次都有速度的直方圖。我們觀看約40次。所以有40個速度變化的直方圖。直方圖幾乎是鐘形曲線,隨着時間推移向一側移動。你認爲展示這個的正確方法是什麼? – Kiarash 2013-05-13 11:10:01

+0

如果它大致是鐘形曲線,我會先畫出平均值和標準偏差。 Mabe沿着這條線:http://www.mathworks。com/matlabcentral/fileexchange/27485 – bdecaf 2013-05-13 12:39:18

0

我會建議這個。這很簡單,並不需要for循環:

bar([y1.' y2.'],'stacked') 
0

這裏有一個方法,這是對我很有用:

enter image description here

我繪製了矩陣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°)。

+0

我從來沒有見過這樣的人,並覺得很難理解。 – neuronet 2015-04-06 17:33:52

1

現在要容易得多:在

histogram(data1, myBins); 
hold on; 
histogram(data2, myBins);