Вы можете нормализовать гистограммы, разделив их на общее количество элементов:
[n1,x1] = histcounts(randn(69,1));
[n2,x2] = histcounts(randn(23,1));
[n3,x3] = histcounts(randn(10,1));
[n4,x4] = histcounts(randn(10,1));
hold on
bar(x4(1:end-1),n4./sum(n4),'histc');
bar(x3(1:end-1),n3./sum(n3),'histc');
bar(x2(1:end-1),n2./sum(n2),'histc');
bar(x1(1:end-1),n1./sum(n1),'histc');
hold off
ax = gca;
set(ax.Children,{'FaceColor'},mat2cell(lines(4),ones(4,1),3))
set(ax.Children,{'FaceAlpha'},repmat({0.7},4,1))
Однако, как вы можете видеть выше, вы можете сделать еще несколько вещей, чтобы сделать ваш код более простым и коротким:
- Вам нужно только
hold on
один раз.
- Вместо того, чтобы собирать все дескрипторы
bar
, используйте дескриптор axes
.
- Постройте столбец в порядке возрастания количества элементов в наборе данных, чтобы все гистограммы были хорошо видны.
- С дескриптором
axes
установите все свойства одной командой.
и в качестве примечания - лучше использовать histcounts
.
Вот результат:
![только история](https://i.stack.imgur.com/WJ8iS .png)
ИЗМЕНИТЬ:
Если вы хотите также построить линию PDF из histfit
, вы можете сначала сохранить ее, а затем нормализовать:
dataset = {randn(69,1),randn(23,1),randn(10,1),randn(10,1)};
fits = zeros(100,2,numel(dataset));
hold on
for k = numel(dataset):-1:1
total = numel(dataset{k}); % for normalizing
f = histfit(dataset{k}); % draw the histogram and fit
% collect the curve data and normalize it:
fits(:,:,k) = [f(2).XData; f(2).YData./total].';
x = f(1).XData; % collect the bar positions
n = f(1).YData; % collect the bar counts
f.delete % delete the histogram and the fit
bar(x,n./total,'histc'); % plot the bar
end
ax = gca; % get the axis handle
% set all color and transparency for the bars:
set(ax.Children,{'FaceColor'},mat2cell(lines(4),ones(4,1),3))
set(ax.Children,{'FaceAlpha'},repmat({0.7},4,1))
% plot all the curves:
plot(squeeze(fits(:,1,:)),squeeze(fits(:,2,:)),'LineWidth',3)
hold off
Опять же, есть некоторые другие улучшения, которые вы можете внести в свой код:
- Поместите все в цикл, чтобы впоследствии было легче изменить эти вещи.
- Соберите все данные кривых в одну переменную, чтобы вы могли очень легко построить их все вместе.
Новый результат:
![История и соответствие](https://i.stack.imgur.com/foxpR.png)
person
EBH
schedule
14.02.2017
n1/sum(n1)
? В противном случае, возможно,histogram(x,'Normalization','probability')
был бы альтернативой. - person Florian   schedule 14.02.2017