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)
def test_unify(self): self.assertEqual(util.unify([1, 2, 2, 3, 3]), [1, 2, 3])