class BqplotXRangeMode(BqplotSelectionTool): icon = 'glue_xrange_select' tool_id = 'bqplot:xrange' action_text = 'X range ROI' tool_tip = 'Select a range of x values' def __init__(self, viewer, **kwargs): super().__init__(viewer, **kwargs) self.interact = BrushIntervalSelector(scale=self.viewer.scale_x, color=INTERACT_COLOR) self.interact.observe(self.update_selection, "brushing") def update_selection(self, *args): with self.viewer._output_widget: if self.interact.selected is not None: x = self.interact.selected if x is not None and len(x): roi = RangeROI(min=min(x), max=max(x), orientation='x') self.viewer.apply_roi(roi) def activate(self): with self.viewer._output_widget: self.interact.selected = None super().activate()
class BqplotYRangeMode(InteractCheckableTool): icon = 'glue_yrange_select' tool_id = 'bqplot:yrange' action_text = 'Y range ROI' tool_tip = 'Select a range of y values' def __init__(self, viewer, **kwargs): super().__init__(viewer, **kwargs) self.interact = BrushIntervalSelector(scale=self.viewer.scale_y, orientation='vertical', color=INTERACT_COLOR) self.interact.observe(self.update_selection, "brushing") def update_selection(self, *args): with self.viewer._output_widget: if self.interact.selected is not None: y = self.interact.selected if y is not None and len(y): roi = RangeROI(min=min(y), max=max(y), orientation='y') self.viewer.apply_roi(roi) def activate(self): with self.viewer._output_widget: self.interact.selected = None super().activate()
def __init__(self, viewer, **kwargs): super().__init__(viewer, **kwargs) self.interact = BrushIntervalSelector(scale=self.viewer.scale_x, color=INTERACT_COLOR) self.interact.observe(self.update_selection, "brushing")
def __init__(self, viewer, **kwargs): super().__init__(viewer, **kwargs) self.interact = BrushIntervalSelector(scale=self.viewer.scale_y, orientation='vertical', color="green") self.interact.observe(self.update_selection, "brushing")
def show(self, title='', xlabel='', ylabel='', xaxis=True, yaxis=True, xticks=True, yticks=True, legend=True, grid=True, **kwargs): # require all data to be present before plotting x = Axis(title=xlabel, scale=self._x_sc) y = Axis(title=ylabel, scale=self._y_sc, orientation='vertical') fig = Figure(axes=[x, y], marks=self._marks, title=title, legend_location='right', interactions=BrushIntervalSelector()) display(VBox([fig, Toolbar(figure=fig)]))
def interaction_map(self): # , xScale, yScale, fig, mark, deb): self.interactions = {} xScale = self.xScale # if xScale is None else xScale yScale = self.yScale # if yScale is None else yScale fig = self.fig # if fig is None else fig mark = fig.marks # if mark is None else mark multi_sel = MultiSelector(scale=xScale, marks=mark) br_intsel = BrushIntervalSelector(scale=xScale, marks=mark) index_sel = IndexSelector(scale=xScale, marks=mark) int_sel = FastIntervalSelector(scale=xScale, marks=mark) br_sel = BrushSelector(x_scale=xScale, y_scale=yScale, marks=mark, color='red') pz = PanZoom(scales={'x': [xScale], 'y': [yScale]}) self.interactions['Multiple_Brush'] = multi_sel self.interactions['BrushX'] = br_intsel self.interactions['Fast_Brush'] = int_sel self.interactions['Brush'] = br_sel self.interactions['Index_Selector'] = index_sel self.interactions['Pan_Zoom'] = pz
def _new_interact(self): return BrushIntervalSelector(scale=self.viewer.scale_x, color=INTERACT_COLOR)
def interaction_map(self): # , xScale, yScale, fig, mark, deb): self.interactions = {} xScale = self.xScale # if xScale is None else xScale yScale = self.yScale # if yScale is None else yScale fig = self.fig # if fig is None else fig mark = fig.marks # if mark is None else mark multi_sel = MultiSelector(scale=xScale, marks=mark) br_intsel = BrushIntervalSelector(scale=xScale, marks=mark) index_sel = IndexSelector(scale=xScale, marks=mark) int_sel = FastIntervalSelector(scale=xScale, marks=mark) br_sel = BrushSelector(x_scale=xScale, y_scale=yScale, marks=mark, color='red') pz = PanZoom(scales={'x': [xScale], 'y': [yScale]}) def cb1(change): if len(change.new) > 1: xr = change.new yr = [None, None] box = [[xr[0], yr[0]], [xr[1], yr[1]]] y = getattr(self, "cbs", None) if y is not None: for k in self.cbs: if 'brush' in k: if self.debug: self.deb.value = str(box) cb = self.cbs[k] if not self.dims: cb(box) else: cb(box, [self.alldims.index(d) for d in self.dims]) else: y = getattr(self, "cbs", None) # Single selector should have different cbs if y is not None: if 'bar' in self.cbs: cb = self.cbs['bar'] if not self.dims: cb(change.new) else: cb(change.new, [self.alldims.index(d) for d in self.dims]) def cb2(change): box = self.interactions['brush']['selector'].selected y = getattr(self, "cbs", None) if y is not None: if 'brush' in self.cbs: if self.debug: self.deb.value = str(box) cb = self.cbs['brush'] if not self.dims: cb(box) else: cb(box, [self.alldims.index(d) for d in self.dims]) def cb3(change): newscales = change.new y = getattr(self, "cbs", None) if y is not None: if 'panzoom' in self.cbs: cb = self.cbs['panzoom'] cb(newscales['x'], newscales['y']) multi_sel.observe(cb1, names=['selected']) br_intsel.observe(cb1, names=['selected']) # 'selected']) index_sel.observe(cb1, names=['selected']) int_sel.observe(cb1, names=['selected']) br_sel.observe(cb2, names=['brushing']) pz.observe(cb3, names=['scales']) self.interactions['brushes'] = {} self.interactions['brushes']['selector'] = multi_sel self.interactions['brushes']['icon'] = 'th-large' self.interactions['brushes']['tooltip'] = 'Multiple Brushes' self.interactions['brushes']['order'] = 0 # ' ' self.interactions['brushes']['watch'] = 'selected' self.interactions['brush_x'] = {} self.interactions['brush_x']['selector'] = br_intsel self.interactions['brush_x']['icon'] = 'arrows-h' self.interactions['brush_x']['tooltip'] = 'Horizontal Brush' self.interactions['brush_x']['order'] = 1 # ' ' self.interactions['brush_x']['watch'] = 'selected' self.interactions['brush_fast'] = {} self.interactions['brush_fast']['selector'] = int_sel self.interactions['brush_fast']['icon'] = 'exchange' self.interactions['brush_fast']['tooltip'] = 'Fast Brush' self.interactions['brush_fast']['order'] = 3 # ' ' self.interactions['brush_fast']['watch'] = 'selected' self.interactions['brush'] = {} self.interactions['brush']['selector'] = br_sel self.interactions['brush']['icon'] = 'retweet' self.interactions['brush']['tooltip'] = 'Brush' self.interactions['brush']['order'] = 4 # ' ' self.interactions['brush']['watch'] = 'brushing' self.interactions['bar'] = {} self.interactions['bar']['selector'] = index_sel self.interactions['bar']['icon'] = 'mouse-pointer' self.interactions['bar']['tooltip'] = 'Single Slider' self.interactions['bar']['order'] = 5 # ' ' self.interactions['bar']['watch'] = 'selected' self.interactions['panzoom'] = {} self.interactions['panzoom']['selector'] = pz self.interactions['panzoom']['icon'] = 'arrows' self.interactions['panzoom']['tooltip'] = 'Pan Zoom' self.interactions['panzoom']['order'] = 6 # '' self.interactions['panzoom']['watch'] = 'scales'
def interaction_map(self): # , xScale, yScale, fig, mark, deb): self.interactions = {} xScale = self.xScale # if xScale is None else xScale yScale = self.yScale # if yScale is None else yScale fig = self.fig # if fig is None else fig mark = fig.marks # if mark is None else mark multi_sel = MultiSelector(scale=xScale, marks=mark) br_intsel = BrushIntervalSelector(scale=xScale, marks=mark) index_sel = IndexSelector(scale=xScale, marks=mark) int_sel = FastIntervalSelector(scale=xScale, marks=mark) br_sel = BrushSelector(x_scale=xScale, y_scale=yScale, marks=mark, color='red') pz = PanZoom(scales={'x': [xScale], 'y': [yScale]}) # def cb1(change): # # def cb2(change): # # def cb3(change): self.interactions['brushes'] = {} self.interactions['brushes']['selector'] = multi_sel self.interactions['brushes']['icon'] = 'th-large' self.interactions['brushes']['tooltip'] = 'Multiple Brushes' self.interactions['brushes']['order'] = 0 # ' ' self.interactions['brushes']['watch'] = 'selected' self.interactions['brush_x'] = {} self.interactions['brush_x']['selector'] = br_intsel self.interactions['brush_x']['icon'] = 'arrows-h' self.interactions['brush_x']['tooltip'] = 'Horizontal Brush' self.interactions['brush_x']['order'] = 1 # ' ' self.interactions['brush_x']['watch'] = 'selected' self.interactions['brush_fast'] = {} self.interactions['brush_fast']['selector'] = int_sel self.interactions['brush_fast']['icon'] = 'exchange' self.interactions['brush_fast']['tooltip'] = 'Fast Brush' self.interactions['brush_fast']['order'] = 3 # ' ' self.interactions['brush_fast']['watch'] = 'selected' self.interactions['brush'] = {} self.interactions['brush']['selector'] = br_sel self.interactions['brush']['icon'] = 'retweet' self.interactions['brush']['tooltip'] = 'Brush' self.interactions['brush']['order'] = 4 # ' ' self.interactions['brush']['watch'] = 'brushing' self.interactions['bar'] = {} self.interactions['bar']['selector'] = index_sel self.interactions['bar']['icon'] = 'mouse-pointer' self.interactions['bar']['tooltip'] = 'Single Slider' self.interactions['bar']['order'] = 5 # ' ' self.interactions['bar']['watch'] = 'selected' self.interactions['panzoom'] = {} self.interactions['panzoom']['selector'] = pz self.interactions['panzoom']['icon'] = 'arrows' self.interactions['panzoom']['tooltip'] = 'Pan Zoom' self.interactions['panzoom']['order'] = 6 # '' self.interactions['panzoom']['watch'] = 'scales'