'Create a scatter plot.
Argument      Description
*xs*, *ys*    Positions of data points.
*zs*          Either an array of the same length as *xs* and
*ys* or a single value to place all points in
the same plane. Default is 0.
*zdir*        Which direction to use as z (\'x\', \'y\' or \'z\')
when plotting a 2D set.
*s*           Size in points^2.  It is a scalar or an array of the
same length as *x* and *y*.
*c*           A color. *c* can be a single color format string, or a
sequence of color specifications of length *N*, or a
sequence of *N* numbers to be mapped to colors using the
*cmap* and *norm* specified via kwargs (see below). Note
that *c* should not be a single numeric RGB or RGBA
sequence because that is indistinguishable from an array
of values to be colormapped.  *c* can be a 2-D array in
which the rows are RGB or RGBA, however, including the
case of a single row to specify the same color for
all points.
*depthshade*
Whether or not to shade the scatter markers to give
the appearance of depth. Default is *True*.
Keyword arguments are passed on to
:func:`~matplotlib.axes.Axes.scatter`.
Returns a :class:`~mpl_toolkits.mplot3d.art3d.Patch3DCollection`'

def scatter(self, xs, ys, zs=0, zdir=u'z', s=20, c=None, depthshade=True, *args, **kwargs):

    had_data = self.has_data()
    xs = np.ma.ravel(xs)
    ys = np.ma.ravel(ys)
    zs = np.ma.ravel(zs)
    if (xs.size != ys.size):
        raise ValueError(u"Arguments    'xs'    and    'ys'    must    be    of    same    size.")
    if (xs.size != zs.size):
        if (zs.size == 1):
            zs = np.tile(zs[0], xs.size)
        else:
            raise ValueError(u"Argument    'zs'    must    be    of    same    size    as    'xs'    and    'ys'    or    of    size    1.")
    s = np.ma.ravel(s)
    (xs, ys, zs, s, c) = cbook.delete_masked_points(xs, ys, zs, s, c)
    patches = super(Axes3D, self).scatter(xs, ys, s=s, c=c, *args, **kwargs)
    if (not cbook.iterable(zs)):
        is_2d = True
        zs = (np.ones(len(xs)) * zs)
    else:
        is_2d = False
    art3d.patch_collection_2d_to_3d(patches, zs=zs, zdir=zdir, depthshade=depthshade)
    if ((self._zmargin < 0.05) and (xs.size > 0)):
        self.set_zmargin(0.05)
    if (not is_2d):
        self.auto_scale_xyz(xs, ys, zs, had_data)
    return patches
