问题遇到的现象和发生背景
根据《python数据科学手册4.7》kde核密度估计的相关代码,尝试利用核密度估计获得更加平滑的作图,但是对比成果,似乎与不适用核密度估计差异不大,并且与书中给出的效果示例有非常明显的差异。
问题相关代码,请勿粘贴截图
这是使用kde的代码
#利用KDE抹掉空间中离散的点,可以使得最后的图像更加平滑
from matplotlib import pyplot as plt
import numpy as np
from scipy.stats import gaussian_kde
#请注意生成网格和创建多维矩阵的区别
mean=[0,0]
cov=([1,1],[1,2])
x,y=np.random.multivariate_normal(mean,cov,10000).T
data=np.vstack([x,y])
#stack合并指令,vstack纵向合并数组
kde=gaussian_kde(data)
xgrid=np.linspace(-3.5,3.5,40)
ygrid=np.linspace(-6,6,40)
Xgrid,Ygrid=np.meshgrid(xgrid,ygrid)
Z=kde.evaluate(np.vstack([Xgrid.ravel(),Ygrid.ravel()]))
plt.imshow(Z.reshape(Xgrid.shape),origin='lower',aspect='auto',extent=[-3.5,3.5,-6,6],cmap='Blues')
cb=plt.colorbar()
cb.set_label("density")
plt.show()
这是不使用kde的代码
import numpy as np
from matplotlib import pyplot as plt
#构建两个高斯分布
mean=[0,0]
cov=[[1,1],[1,2]]
x,y=np.random.multivariate_normal(mean,cov,10000).T
#与一维类似,但是要写成均值矩阵和协方差矩阵
#先构建多变量的均值矩阵和协方差矩阵,再同时生成二维矩阵
plt.hist2d(x,y,bins=30,cmap='Blues')
cb=plt.colorbar()
cb.set_label('counts in bin')
#给colorbal添加标签
plt.show()
#如果想用六边形区间划分,改hist为hexbin
运行结果及报错内容
第一张图片没有使用kde,后一张使用了kde,虽然有一定区别,但是觉得不够显著,也没有那么平滑
我的解答思路和尝试过的方法
我想要达到的结果‘
请指教问题所在,并且能够解释一下kde相关函数等的具体含义