Sie können Ihre Histogramme dividiert durch die Gesamtzahl der Elemente normalisieren:
[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))
Doch wie Sie oben sehen können, können Sie noch einige Dinge tun, um Ihren Code einfacher und kurz zu machen:
- Sie müssen nur
hold on
einmal.
- Anstatt alle
bar
Griffe zu sammeln, verwenden Sie den axes
Griff.
- Stellen Sie den Balken in aufsteigender Reihenfolge der Anzahl der Elemente im Dataset dar, sodass alle Histogramme deutlich sichtbar sind.
- Mit dem Handle legen Sie alle Eigenschaften auf einen Befehl fest.
und als Randnotiz - es ist besser zu verwenden histcounts
. Hier
ist das Ergebnis:
EDIT:
Wenn Sie wollen auch die pdf-Linie zeichnen von histfit
, dann können Sie sie speichern zuerst, und dann es normalisieren:
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
Auch hier gibt es einige andere Verbesserungen, die Sie in Ihren Code vorstellen kann:
- Setzen Sie alles in einer Schleife thigs leichter später geändert zu machen.
- Sammeln Sie alle Kurven Daten zu einer Variablen, so dass Sie sie alle sehr einfach zusammenstellen können.
Das neue Ergebnis ist:
Warum bar nicht 'n1/Summe (n1)' statt? Andernfalls wäre vielleicht 'Histogramm (x, 'Normalisierung', 'Wahrscheinlichkeit') 'eine Alternative. – Florian
Die n1/sum (n1) hat super funktioniert, gibt es eine Möglichkeit, dies mit histfit zu tun? oder einen besseren/leichteren Weg, Fit-Linien hinzuzufügen? – user3470496