Esempio n. 1
0
    def _run(self, **kwargs):
        xss = kwargs['x']
        yss = kwargs['y']

        keys = []
        if self.markers:
            keys.append(kwargs['markers'])
            markers = unify(kwargs['markers'])
        if self.colors:
            keys.append(kwargs['colors'])
            colors = unify(kwargs['colors'])

        if self.labels:
            for xs, ys in zip(xss, yss):
                label = kwargs['labels'].pop()
                for x, y in zip(xs, ys):
                    self.plot.text(x, y, label, rotation=-45)

        if self.colors or self.markers:
            legend = kwargs['legend']
            keys = zip(*keys)
            x_values = []
            y_values = []
            colors = []
            markers = []
            keys, legend, xss, yss = zip(*sorted(zip(keys, legend, xss, yss), key=lambda x: x[0]))
            for _, group in itertools.groupby(zip(keys, xss), lambda x: x[0]):
                xs = []
                for key, values in group:
                    xs.extend(values)
                    if self.colors:
                        colors.append(key[1])
                    if self.markers:
                        markers.append(key[0])

                x_values.append(xs)

            markers = unify(markers)
            colors = unify(markers)
            legend = unify(legend)

            for _, group in itertools.groupby(zip(keys, yss), lambda x: x[0]):
                ys = []
                for _, values in group:
                    ys.extend(values)
                y_values.append(ys)

            xss = x_values
            yss = y_values

        handles = []
        for xs, ys in zip(xss, yss):
            options = dict()
            if self.colors:
                options['color'] = colors.pop()

            if self.markers:
                options['marker'] = markers.pop()
            else:
                options['marker'] = 'o'

            handles.append(self.plot.scatter(xs, ys, **options))

        if self.markers or self.colors:
            self.fig.legend(handles, legend, self.legend_position)
Esempio n. 2
0
 def test_unify(self):
     self.assertEqual(util.unify([1, 2, 2, 3, 3]), [1, 2, 3])