ECG-Kit 1.0
(2,724 bytes)
%PLOTF Plot feature distribution, special version
%
% h = PLOTF(A,N)
%
% Produces 1-D density plots for all the features in dataset A. The
% densities are estimated using PARZENML. N is the number of
% feature density plots on a row.
%
% See also DATASETS, PARZENML
% Copyright: R.P.W. Duin, duin@ph.tn.tudelft.nl
% Faculty of Applied Sciences, Delft University of Technology
% P.O. Box 5046, 2600 GA Delft, The Netherlands
% $Id: plotf.m,v 1.6 2009/11/13 08:54:18 davidt Exp $
function h_out = plotf(a,n,z)
%DXD make a standard setting for n, I'm getting crazy!
if nargin<2
n = 1;
end
if ~isdataset(a)
a = prdataset(a,1); % solves a lot of problems
end
[m,k,c] = getsize(a);
% Define the color for each of the classes:
if c == 1
clrmap = [0 0 1];
elseif c == 2
clrmap = [0 0 1; 1 0 0];
else
clrmap = hsv(c);
end
% Make subplots for each feature, so a grid of p x q subplots is
% defined
h = [];
if k >= n
p = ceil(k/n); q = n;
else
p = k; q = 1;
end
if isempty(getfeatlab(a))
a = setfeatlab(a,[1:k]');
end
% Get the feature names
feats = getfeatlab(a,'string');
%DXD what happens here?!
%RD If feature labels are scalars to single characters it might be
%nicer to put 'Feature ' in front of it.
if size(feats,2) == 1
feats = [repmat('Feature ',size(feats,1),1) feats];
end
if isempty(feats)
feats = num2str((1:k)');
end
% Make the plot for each of the features:
for j = 1:k
b = a(:,j);
s = zeros(1,c);
d = zeros(121,c);
bb = [-0.10:0.01:1.10]' * (max(b)-min(b)) + min(b);
ex = 0;
% Make a density estimate of each of the classes:
for i = 1:c
I = findnlab(a,i);
D = +distm(bb,b(I,:));
if nargin < 3
s(i) = parzenml(b(I,:));
else
s(i) = z(i);
end
% Compute the density function
d(:,i) = sum(exp(-D/(s(i).^2)),2)./(length(I)*s(i));;
end
% Create the subplots with the correct sizes:
if p==1 && q==1
% avoid subplots in case of single plot
plot(bb,zeros(size(bb)),'w.');
hold on;
else
subplot(p,q,j)
plot(bb,zeros(size(bb)),'w.');
hold on
end
h = [];
% Scatter the data and plot the density functions for each of the
% classes:
for i = 1:c
I = findnlab(a,i);
hh = plot(b(I),zeros(size(b(I))),'x',bb,+d(:,i));
set(hh,'color',clrmap(i,:));
h = [h;hh];
end
legend(h(1:2:end)',num2str(getlablist(a))); %does not work properly
title([getname(a) ': ' feats(j,:)]);
V = axis;
axis([bb(1) bb(end) V(3) V(4)]);
set(gca,'xtick',[]);
set(gca,'ytick',[]);
xlabel(feats(j,:));
hold off
end
% The last details to take care of:
if k == 1, title(''); end
if nargout > 0
h_out = h;
end
return