Consider the following example:
%# plot surface and contour Z = peaks; surf(Z), hold on [~,h] = contourf(Z); %# get handle to contourgroup object %# change the ZData property of the inner patches hh = get(h,'Children'); %# get handles to patch objects for i=1:numel(hh) zdata = ones(size( get(hh(i),'XData') )); set(hh(i), 'ZData',-10*zdata) end

UPDATE:
The above does not work in HG2. It can be fixed using the hidden ContourZLevel outline ContourZLevel :
Z = peaks; surf(Z), hold on [~,h] = contourf(Z); h.ContourZLevel = -10;
You can also use hgtransform to achieve a similar goal, which is a documented and recommended approach.
See another answer of mine for further explanation: plot multiple 2d graphic outlines on one 3D shape .
source share