MATLAB: Scale ksdensity

ksdensity

Hello everyone.. I have data on my X-axis I import it from a file and I am trying to estimate the kernel function for it.. I believe the code for the kernel is right but I only can see my data(red) and not the kernel but I can see a blue line on the axes and I think its the kernel but not scaled .. I did the scaling for the data but don't know how to scale the ksdensity. I don't know how can you scale two different plots using axes? or is there another way I can make the kernel visible in my plot?
work = importdata('data.dat');
x = work(:,1);
X = (x).';
a= min(X);
b=max(X);
[xi,f]=ksdensity(X);
plot(f,xi);line(repmat(X,2,1),repmat([0;1],1,length(X)),'color','r' );axis([a b 0 40]);

Best Answer

The output of ksdensity() is scaled so that the area under the curve is equal to 1, which is conventional for a probability density function. Using your notation, this means that
sum(xi.*diff([0,f]))
will be approximately 1.
If you want your red lines to be about the same height as the curve, you will need to multiply one or the other before plotting. For example, use the following line to use shorter red lines. (I also commented out your manual rescaling.)
plot(f,xi);line(repmat(X,2,1),repmat([0;0.01],1,length(X)),'color','r' );%axis([a b 0 40]);
If you really want to use two different scales, then you can use the plotyy() command.