您正在为直方图使用默认的 bin 数量,我假设您正在使用默认数量的 bin 进行核密度估计计算。
根据您所拥有的数据点数量,这肯定不是最佳的,正如您所发现的那样。首先要尝试计算optimum bin width 以提供最平滑的曲线,同时尽可能最好地保留底层PDF。 (另见here、here和here);
如果您仍然不喜欢结果图的平滑度,您可以尝试使用来自hist 的bins 输出作为ksdensity 的进一步输入。也许是这样的:
[kcounts,kbins] = ksdensity(data,bins,'npoints',length(bins));
我没有你的数据,所以你可能需要稍微调整一下参数才能得到你想要的。
或者,您可以尝试通过从 hist 获得的点拟合 spline 并绘制它。
一些代码:
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 给出了平滑曲线。根据您在数据中查找的内容,这可能是好是坏。