2016-08-02 2 views
4

Используя функцию hist(), то можно построить так: [link](http://nl.mathworks.com/help/examples/graphics/CreateHistogramBarPlotwithMatrixInputExample_01.png).Можно ли построить мульти гистограмму столбцов бок о бок в Matlab, используя гистограмму() вместо Hist()

Matlab рекомендует использовать histogram() вместо hist().

Plotting несколько гистограмм в том же участке с помощью histogram() приводит к следующему: [link](http://nl.mathworks.com/help/examples/matlab/PlotMultipleHistogramsExample_01.png)

Столбцы накладываются друг на друга и не бок о бок.

Возможно ли построить гистограмму со столбцами бок о бок в пределах того же участка с использованием функции histogram()? Если да, как мне это сделать?

Фрагмент кода:

a = randn(100, 2); 

edges = -3:3; 
xbins = edges(1:end-1)+0.5; 

figure(1) 
hist(a, xbins) 

figure(2), hold on 
histogram(a(:, 1), edges) 
histogram(a(:, 2), edges) 
+0

Сообщение фиктивный код для обоих методов (т.е. таким образом, мы можем увидеть структуру данных) – Dan

ответ

-1

Как насчет этого?

histograms in two separate subplots

x1 = randn(100,1); 
x2 = randn(100,1); 

figure_rows = 1; 
figure_cols = 2; 

figure 
subplot(figure_rows, figure_cols, 1); 
histogram(x1); 
title('Hist One') 

subplot(figure_rows, figure_cols, 2); 
histogram(x2); 
title('Hist Two')  
+0

Для того, чтобы проложенным результаты легко видеть, я попытался вставить изображение в мой ответ, но по-видимому мне нужно как минимум 10 очков репутации, прежде чем stackoverflow позволит мне это сделать. –

+0

Это не то, что я ищу. Я хочу, чтобы бары были бок о бок в одном и том же сюжете, чтобы легче сравнивать значения. –

+1

Пожалуйста, отредактируйте свой ответ, чтобы он был правильным, а не отправлял ДРУГОЙ ответ в том же сообщении. – Suever

1

Как насчет этого?

Click here for a picture of the resulting plot

data1 = randn(1000,1); 
data2 = randn(1000,1); 
data2 = data2 - 1.5*ones(size(data2)); 

lowest_boundary = min(min(data1), min(data2)); 
highest_boundary = max(max(data1), max(data2)); 
nbins = 10; 

boundaries = linspace(lowest_boundary, highest_boundary, nbins + 1); 

bin_assighnments1 = discretize(data1, boundaries); 
bin_assighnments2 = discretize(data2, boundaries); 

bin_counts1 = zeros(numel(boundaries) - 1, 1); 
bin_counts2 = zeros(numel(boundaries) - 1, 1); 

for m = 1:numel(bin_assighnments1) 
    n = bin_assighnments1(m); 
    bin_counts1(n) = 1 + bin_counts1(n); 

    n = bin_assighnments2(m); 
    bin_counts2(n) = 1 + bin_counts2(n); 
end 

merged_bin_counts = cat(2, bin_counts1, bin_counts2); 

x = zeros(1, nbins); 

for m = 1:nbins 
    x(m) = (boundaries(m) + boundaries(m+1))/2; 
end 

bar(x, merged_bin_counts);