您正在使用直方图的默认箱数,并且我假设您的核密度估计计算也使用默认的箱数。
正如您所发现的,根据您拥有的数据点数量,这肯定不是最佳的。首先要尝试的是计算最佳箱宽提供最平滑的曲线,同时尽可能保留底层 PDF。 (也可以看看here, here, and here);
如果您仍然不喜欢结果图的平滑程度,您可以尝试使用bins
输出来自hist
作为进一步的输入ksdensity
。也许是这样的:
[kcounts,kbins] = ksdensity(data,bins,'npoints',length(bins));
我没有你的数据,所以你可能需要稍微调整一下参数才能得到你想要的。
或者,您可以尝试安装spline
通过你得到的点hist
并绘制它。
一些代码:
data = randn(1,1e4);
optN = sshist(data);
figure(1)
[N,Center] = hist(data);
[Nopt,CenterOpt] = hist(data,optN);
[f,xi] = ksdensity(data,CenterOpt);
dN = mode(diff(Center));
dNopt = mode(diff(CenterOpt));
plot(Center,N/dN,'.-',CenterOpt,Nopt/dNopt,'.-',xi,f*length(data),'.-')
legend('Default','Optimum','ksdensity')
结果:
请注意,“最佳”箱宽度保留了分布的一些精细结构(我必须运行几次才能获得峰值),而ksdensity
给出平滑的曲线。根据您在数据中寻找的内容,这可能是好是坏。