这有望让你开始走上正轨,但我肯定会推荐阅读
pcolor和
pcolormesh的文档.
您已注释#使用最近邻插值绘制密度图,但由于Z是一维数组,因此密度图没有任何二维密度数据.密度图最容易通过使用np.histogram2d创建,我将在下面使用您的数据显示.
Z, xedges, yedges = np.histogram2d(x, y)
Z现在是一个2D数组,其中包含有关x,y坐标分布的信息.这种分布可以像pcolormesh一样绘制
plt.pcolormesh(xedges, yedges, Z.T)
在获得像您发布的图像之前的一些方法,但它应该解释您的错误并帮助您走上正确的轨道.
更新:更好,更平滑的密度图
假设您有两个1D数组,x和y,您可以使用内核密度估计来获得更好的热图,方法如下[reference],
from scipy.stats.kde import gaussian_kde
k = gaussian_kde(np.vstack([x, y]))
xi, yi = np.mgrid[x.min():x.max():x.size**0.5*1j,y.min():y.max():y.size**0.5*1j]
zi = k(np.vstack([xi.flatten(), yi.flatten()]))
现在您可以使用pcolormesh或contourf绘制高斯KDE,具体取决于您所追求的效果/美学效果
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(7,8))
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212)
# alpha=0.5 will make the plots semitransparent
ax1.pcolormesh(xi, yi, zi.reshape(xi.shape), alpha=0.5)
ax2.contourf(xi, yi, zi.reshape(xi.shape), alpha=0.5)
ax1.set_xlim(x.min(), x.max())
ax1.set_ylim(y.min(), y.max())
ax2.set_xlim(x.min(), x.max())
ax2.set_ylim(y.min(), y.max())
# you can also overlay your soccer field
im = plt.imread('soccerPitch.jpg')
ax1.imshow(im, extent=[x.min(), x.max(), y.min(), y.max()], aspect='auto')
ax2.imshow(im, extent=[x.min(), x.max(), y.min(), y.max()], aspect='auto')
我得到这个图像: