ax.scatter(x, y, z, c='r', marker='.')
xflat = np.full_like(x, min(ax.get_xlim()))
yflat = np.full_like(y, max(ax.get_ylim()))
zflat = np.full_like(z, min(ax.get_zlim()))
ax.scatter(xflat, y, z)
ax.scatter(x, yflat, z)
ax.scatter(x, y, zflat)
3D-диаграмма рассеяния с 2D-гистограммой по бокам