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'))
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
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
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
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)
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
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