Create a quiver plot, which is like a scatter plot but with arrows pointing in the direction given by u, v and w.

    :param x: {x}
    :param y: {y}
    :param z: {z}
    :param u: {u_dir}
    :param v: {v_dir}
    :param w: {w_dir}
    :param size: {size}
    :param size_selected: like size, but for selected glyphs
    :param color: {color}
    :param color_selected: like color, but for selected glyphs
    :param marker: (currently only 'arrow' would make sense)
    :param kwargs: extra arguments passed on to the Scatter constructor
    :return: :any:`Scatter`

def quiver(
    x,
    y,
    z,
    u,
    v,
    w,
    size=default_size * 10,
    size_selected=default_size_selected * 10,
    color=default_color,
    color_selected=default_color_selected,
    marker="arrow",
    **kwargs
):
    """Create a quiver plot, which is like a scatter plot but with arrows pointing in the direction given by u, v and w.

    :param x: {x}
    :param y: {y}
    :param z: {z}
    :param u: {u_dir}
    :param v: {v_dir}
    :param w: {w_dir}
    :param size: {size}
    :param size_selected: like size, but for selected glyphs
    :param color: {color}
    :param color_selected: like color, but for selected glyphs
    :param marker: (currently only 'arrow' would make sense)
    :param kwargs: extra arguments passed on to the Scatter constructor
    :return: :any:`Scatter`
    """
    fig = gcf()
    _grow_limits(x, y, z)
    if 'vx' in kwargs or 'vy' in kwargs or 'vz' in kwargs:
        raise KeyError('Please use u, v, w instead of vx, vy, vz')
    s = ipv.Scatter(
        x=x,
        y=y,
        z=z,
        vx=u,
        vy=v,
        vz=w,
        color=color,
        size=size,
        color_selected=color_selected,
        size_selected=size_selected,
        geo=marker,
        **kwargs
    )
    fig.scatters = fig.scatters + [s]
    return s