contour() and contourf() are almost identical internally. They return a single hggroup object, and that hggroup object have a bunch of Children. Each of the Children is a patch object for a different contour level, one patch object per level, with embedded NaN in the coordinates where needed to jump from one place to another in the drawing.
The code that builds the contours sets the Z coordinates to the level of the contour heights, but then one of the last things that contour / contourf does is reset those coordinates to 0. Fortunately, each patch object has a UserData property that is used to store the contour level that it was for.
Soooo...
chand = contour(...
cpatches = get(chand, 'Children');
for K = 1:length(cpatches)
xcoord{K} = get(cpatches(K),'XData');
ycoord{K} = get(cpatches(K),'YData');
zcoord{K} = get(cpatches(K),'UserData');
end
Warning: for any contour that is moderately complex, the list of coordinates will be pretty messy, lots of ins-and-outs.
Best Answer