Plot many markers/symbols in 3d.

    :param x: {x}
    :param y: {y}
    :param z: {z}
    :param color: {color}
    :param size: {size}
    :param size_selected: like size, but for selected glyphs
    :param color_selected:  like color, but for selected glyphs
    :param marker: {marker}
    :param selection: numpy array of shape (N,) or (S, N) with indices of x,y,z arrays of the selected markers, which
                      can have a different size and color
    :param kwargs:
    :return: :any:`Scatter`

def scatter(
    x,
    y,
    z,
    color=default_color,
    size=default_size,
    size_selected=default_size_selected,
    color_selected=default_color_selected,
    marker="diamond",
    selection=None,
    grow_limits=True,
    **kwargs
):
    """Plot many markers/symbols in 3d.

    :param x: {x}
    :param y: {y}
    :param z: {z}
    :param color: {color}
    :param size: {size}
    :param size_selected: like size, but for selected glyphs
    :param color_selected:  like color, but for selected glyphs
    :param marker: {marker}
    :param selection: numpy array of shape (N,) or (S, N) with indices of x,y,z arrays of the selected markers, which
                      can have a different size and color
    :param kwargs:
    :return: :any:`Scatter`
    """
    fig = gcf()
    if grow_limits:
        _grow_limits(x, y, z)
    s = ipv.Scatter(
        x=x,
        y=y,
        z=z,
        color=color,
        size=size,
        color_selected=color_selected,
        size_selected=size_selected,
        geo=marker,
        selection=selection,
        **kwargs
    )
    fig.scatters = fig.scatters + [s]
    return s