def colors(self): if self._colors is None: from Orange.widgets.utils.colorpalette import ColorPaletteGenerator self._colors = ColorPaletteGenerator.palette(self) colors = self.attributes.get('colors') if colors: self._colors[:len(colors)] = [hex_to_color(color) for color in colors] self._colors.flags.writeable = False return self._colors
def colors(self): if self._colors is None: if "colors" in self.attributes: self._colors = np.array([hex_to_color(col) for col in self.attributes["colors"]], dtype=np.uint8) else: from Orange.widgets.utils.colorpalette import ColorPaletteGenerator self._colors = ColorPaletteGenerator.palette(self) self._colors.flags.writeable = False return self._colors
def colors(self): if self._colors is None: from Orange.widgets.utils.colorpalette import ColorPaletteGenerator self._colors = ColorPaletteGenerator.palette(self) colors = self.attributes.get('colors') if colors: self._colors[:len(colors)] = [ hex_to_color(color) for color in colors ] self._colors.flags.writeable = False return self._colors
def colors(self): if self._colors is None: if "colors" in self.attributes: self._colors = np.array( [hex_to_color(col) for col in self.attributes["colors"]], dtype=np.uint8) else: from Orange.widgets.utils.colorpalette import \ ColorPaletteGenerator self._colors = ColorPaletteGenerator.palette(self) self._colors.flags.writeable = False return self._colors
def colors(self): if self._colors is not None: colors = np.array(self._colors) elif not self.values: colors = np.zeros((0, 3)) # to match additional colors in vstacks else: from Orange.widgets.utils.colorpalette import ColorPaletteGenerator default = tuple(ColorPaletteGenerator.palette(self)) colors = self.attributes.get('colors', ()) colors = tuple(hex_to_color(color) for color in colors) \ + default[len(colors):] colors = np.array(colors) colors.flags.writeable = False return colors
def _get_colors(self): """ Defines colors for values. If colors match in all models use the union otherwise use standard colors. """ all_colors_values = self._all_color_values() base_color, base_values = all_colors_values[0] for c, v in all_colors_values[1:]: if not self._colors_match(base_color, base_values, c, v): base_color = [] break # replace base_color if longer if len(v) > len(base_color): base_color = c base_values = v if len(base_color) != len(self.class_values): return ColorPaletteGenerator.palette(len(self.class_values)) # reorder colors to widgets order colors = [None] * len(self.class_values) for c, v in zip(base_color, base_values): colors[self.class_values.index(v)] = c return colors
def test_colors_diff_domain(self): """ Test whether the color selection for values is correct. """ # pylint: disable=protected-access self.send_signal(self.widget.Inputs.data, self.iris) # case 1: two domains one subset other idom = self.iris.domain dom1 = Domain( idom.attributes, DiscreteVariable(idom.class_var.name, idom.class_var.values)) dom2 = Domain( idom.attributes, DiscreteVariable(idom.class_var.name, idom.class_var.values[:2])) iris1 = self.iris[:100].transform(dom1) iris2 = self.iris[:100].transform(dom2) predictor_iris1 = ConstantLearner()(iris1) predictor_iris2 = ConstantLearner()(iris2) self.send_signal(self.widget.Inputs.predictors, predictor_iris1) self.send_signal(self.widget.Inputs.predictors, predictor_iris2, 1) colors = self.widget._get_colors() np.testing.assert_array_equal(colors, iris1.domain.class_var.colors) # case 2: two domains one subset other - different color order idom = self.iris.domain colors = idom.class_var.colors[::-1] dom1 = Domain( idom.attributes, DiscreteVariable(idom.class_var.name, idom.class_var.values)) dom2 = Domain( idom.attributes, DiscreteVariable(idom.class_var.name, idom.class_var.values[:2])) dom1.class_var.colors = colors dom2.class_var.colors = colors[:2] iris1 = self.iris[:100].transform(dom1) iris2 = self.iris[:100].transform(dom2) predictor_iris1 = ConstantLearner()(iris1) predictor_iris2 = ConstantLearner()(iris2) self.send_signal(self.widget.Inputs.predictors, predictor_iris1) self.send_signal(self.widget.Inputs.predictors, predictor_iris2, 1) colors = self.widget._get_colors() np.testing.assert_array_equal(colors, iris1.domain.class_var.colors) # case 3: domain color, values miss-match - use default colors idom = self.iris.domain dom1 = Domain( idom.attributes, DiscreteVariable(idom.class_var.name, idom.class_var.values)) dom2 = Domain( idom.attributes, DiscreteVariable(idom.class_var.name, idom.class_var.values)) dom1.class_var.colors = dom1.class_var.colors[::-1] iris1 = self.iris.transform(dom1) iris2 = self.iris.transform(dom2) predictor_iris1 = ConstantLearner()(iris1) predictor_iris2 = ConstantLearner()(iris2) self.send_signal(self.widget.Inputs.predictors, predictor_iris1) self.send_signal(self.widget.Inputs.predictors, predictor_iris2, 1) colors = self.widget._get_colors() np.testing.assert_array_equal(colors, ColorPaletteGenerator.palette(3)) # case 4: two domains different values order, matching colors idom = self.iris.domain # this way we know that default colors are not used colors = ColorPaletteGenerator.palette(5)[2:] dom1 = Domain( idom.attributes, DiscreteVariable(idom.class_var.name, idom.class_var.values)) dom2 = Domain( idom.attributes, DiscreteVariable(idom.class_var.name, idom.class_var.values[::-1])) dom1.class_var.colors = colors dom2.class_var.colors = colors[::-1] # colors mixed same than values iris1 = self.iris[:100].transform(dom1) iris2 = self.iris[:100].transform(dom2) predictor_iris1 = ConstantLearner()(iris1) predictor_iris2 = ConstantLearner()(iris2) self.send_signal(self.widget.Inputs.predictors, predictor_iris1) self.send_signal(self.widget.Inputs.predictors, predictor_iris2, 1) colors = self.widget._get_colors() np.testing.assert_array_equal(colors, iris1.domain.class_var.colors)