Beispiel #1
0
 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
Beispiel #2
0
    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
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
 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
Beispiel #6
0
    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
Beispiel #7
0
    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)