Пример #1
0
    def __init__(self, view, viewer_state, layer, layer_state):

        super(IpyvolumeScatterLayerArtist, self).__init__(viewer_state,
                                                          layer_state=layer_state,
                                                          layer=layer)

        self.view = view

        self.scatter = ipyvolume.Scatter(x=[0, 1], y=[0, 1], z=[0, 1], color='green',
                                         color_selected='orange', size_selected=7, size=5,
                                         geo='box')
        self.quiver = ipyvolume.Scatter(x=[0, 1], y=[0, 1], z=[0, 1], color='green',
                                        color_selected='orange', size_selected=7, size=5,
                                        geo='arrow', visible=False)
        self.view.figure.scatters = list(self.view.figure.scatters) + [self.scatter, self.quiver]

        on_change([(self.state, 'cmap_mode', 'cmap_att',
                    'cmap_vmin', 'cmap_vmax', 'cmap', 'color')])(self._update_color)
        on_change([(self.state, 'size', 'size_scaling',
                    'size_mode', 'size_vmin', 'size_vmax')])(self._update_size)

        viewer_state.add_callback('x_att', self._update_xyz_att)
        viewer_state.add_callback('y_att', self._update_xyz_att)
        viewer_state.add_callback('z_att', self._update_xyz_att)
        self._update_color()

        link((self.state, 'visible'), (self.scatter.material, 'visible'))

        on_change([(self.state, 'vector_visible', 'vx_att',
                    'vy_att', 'vz_att')])(self._update_quiver)
        link((self.state, 'vector_visible'), (self.quiver, 'visible'))

        link((self.state, 'geo'), (self.scatter, 'geo'))
Пример #2
0
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
Пример #3
0
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):
    """Plots 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
Пример #4
0
def plot(x, y, z, color=default_color, **kwargs):
    """Plot a line in 3d

    :param x: {x}
    :param y: {y}
    :param z: {z}
    :param color: {color}
    :param kwargs: extra arguments passed to the Scatter constructor
    :return: :any:`Scatter`
    """
    fig = gcf()
    _grow_limits(x, y, z)
    scatter = ipv.Scatter(x=x,
                          y=y,
                          z=z,
                          color=color,
                          color_selected=None,
                          size_selected=1,
                          size=1,
                          connected=True,
                          visible_markers=False,
                          visible_lines=True,
                          **kwargs)
    fig.scatters = fig.scatters + [scatter]
    return scatter
Пример #5
0
    def __init__(self, view, viewer_state, layer, layer_state):
        super(IpyvolumeScatterLayerArtist, self).__init__(viewer_state, layer_state=layer_state, layer=layer)
        self.view = view
        self.state = layer_state or self._layer_state_cls(viewer_state=viewer_state,
                                                          layer=self.layer)
        self._viewer_state = viewer_state
        if self.state not in self._viewer_state.layers:
            self._viewer_state.layers.append(self.state)

        self.scatter = ipyvolume.Scatter(x=[0, 1], y=[0, 1], z=[0,1], color='green',
            color_selected='orange', size_selected=7, size=5, geo='box')
        self.quiver = ipyvolume.Scatter(x=[0, 1], y=[0, 1], z=[0,1], color='green',
            color_selected='orange', size_selected=7, size=5, geo='arrow', visible=False)
        self.view.figure.scatters = list(self.view.figure.scatters) + [self.scatter, self.quiver]
        #link((self.scatter, 'selected'), (self.quiver, 'selected'))

        viewer_state.add_callback('x_att', self._update_xyz_att)
        viewer_state.add_callback('y_att', self._update_xyz_att)
        viewer_state.add_callback('z_att', self._update_xyz_att)
Пример #6
0
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:
    :param z:
    :param u: {u}
    :param v:
    :param w:
    :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:
    :return:
    """
    fig = gcf()
    _grow_limits(x, y, z)
    scatter = 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 + [scatter]
    return scatter
Пример #7
0
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,
            **kwargs):
    """Create a scatter 3d plot with

    :param x: {x}
    :param y:
    :param 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: array with indices of x,y,z arrays of the selected markers, which can have a different size and color
    :param kwargs:
    :return:
    """
    fig = gcf()
    _grow_limits(x, y, z)
    scatter = 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 + [scatter]
    return scatter