'Create a 3D contourf plot.
Argument    Description
*X*, *Y*,   Data values as numpy.arrays
*Z*
*zdir*      The direction to use: x, y or z (default)
*offset*    If specified plot a projection of the filled contour
on this position in plane normal to zdir
The positional and keyword arguments are passed on to
:func:`~matplotlib.axes.Axes.contourf`
Returns a :class:`~matplotlib.axes.Axes.contourf`
.. versionchanged :: 1.1.0
The *zdir* and *offset* kwargs were added.'

def contourf(self, X, Y, Z, *args, **kwargs):

    zdir = kwargs.pop(u'zdir', u'z')
    offset = kwargs.pop(u'offset', None)
    had_data = self.has_data()
    (jX, jY, jZ) = art3d.rotate_axes(X, Y, Z, zdir)
    cset = super(Axes3D, self).contourf(jX, jY, jZ, *args, **kwargs)
    self.add_contourf_set(cset, zdir, offset)
    self.auto_scale_xyz(X, Y, Z, had_data)
    return cset
