def apply_roi(self, roi): # every editable subset is updated # using specified ROI if isinstance(roi, RangeROI): lo, hi = roi.range() att = self.xatt if roi.ori == 'x' else self.yatt if self._check_categorical(att): comp = list(self._get_data_components(roi.ori)) if comp: subset_state = CategoricalRoiSubsetState.from_range(comp[0], att, lo, hi) else: subset_state = None else: subset_state = RangeSubsetState(lo, hi, att) else: if self._check_categorical(self.xatt) or self._check_categorical(self.yatt): subset_state = self._process_categorical_roi(roi) else: subset_state = RoiSubsetState() subset_state.xatt = self.xatt subset_state.yatt = self.yatt x, y = roi.to_polygon() subset_state.roi = PolygonalROI(x, y) mode = EditSubsetMode() visible = [d for d in self._data if self.is_visible(d)] focus = visible[0] if len(visible) > 0 else None mode.update(self._data, subset_state, focus_data=focus)
def apply_roi(self, roi): x, _ = roi.to_polygon() lo = min(x) hi = max(x) # expand roi to match bin edges bins = self.bins if lo >= bins.min(): lo = bins[bins <= lo].max() if hi <= bins.max(): hi = bins[bins >= hi].min() if self.xlog: lo = 10 ** lo hi = 10 ** hi comp = list(self._get_data_components('x')) if comp: comp = comp[0] if comp.categorical: state = CategoricalRoiSubsetState.from_range(comp, self.component, lo, hi) else: state = RangeSubsetState(lo, hi) state.att = self.component mode = EditSubsetMode() visible = [d for d in self.data if self.is_layer_visible(d)] focus = visible[0] if len(visible) > 0 else None mode.update(self.data, state, focus_data=focus)
def _process_categorical_roi(self, roi): """ Returns a RoiSubsetState object. """ if isinstance(roi, RectangularROI): subsets = [] axes = [('x', roi.xmin, roi.xmax), ('y', roi.ymin, roi.ymax)] for coord, lo, hi in axes: comp = list(self._get_data_components(coord)) if comp: if comp[0].categorical: subset = CategoricalRoiSubsetState.from_range(comp[0], self._get_attribute(coord), lo, hi) else: subset = RangeSubsetState(lo, hi, self._get_attribute(coord)) else: subset = None subsets.append(subset) else: raise AssertionError return AndState(*subsets)