Есть ли способ найти значения гистограммы в MATLAB?

У меня 7 векторов в диапазоне от 0 до 0,99. Количество записей в каждом векторе разное, поэтому было бы "несправедливо" сравнивать их гистограммы, поскольку должна существовать прямая корреляция между количеством бинов и количеством записей, если предположить, что переменные разнесены. Я заинтересован в построении плавной кривой плотности значений. Таким образом, для вектора a с, скажем, значениями n от 0 и 0,99 я бы хотел, чтобы ось X составляла от 0 до 0,99, причем ось Y представляет собой вероятности, связанные с этими значениями.

Есть идеи или идеи?

2 ответа

[h,b] = hist( my_data, Nbins );
plot( b, h / sum(h) );

Не уверен, какой тип сглаживания вы хотите, но некоторая идея с чего начать:

%some example vectors of different length
p=[10,100,1000,10000];
D=arrayfun(@(x)(rand(x,1)),p,'uni',false);
%defining the range
support=[0:.1:1];
%make sure we don't miss a value
esupport=support;
esupport(end+1)=inf;
%define a function which uses histc to calculate the emperical probability for each bin
epdf_bin=@(x)histc(x,esupport)/numel(x);
%evaluate emperical probability
E=cellfun(epdf_bin,D,'uni',false);

M=cat(2,E{:});
%plot
bar(M);
%print legend
legend(arrayfun(@num2str,p,'uni',false));
%fix x axis labels
set(gca,'XTick',.5:numel(support))
set(gca,'XTickLabel',support)

Другие вопросы по тегам