def _createDiagram(self): self._updating = True oldselection = list(self.selection) self.vennwidget.clear() n = len(self.itemsets) self.disjoint = disjoint(set(s.items) for s in self.itemsets.values()) vennitems = [] colors = colorpalette.ColorPaletteHSV(n) for i, (key, item) in enumerate(self.itemsets.items()): gr = VennSetItem(text=item.title, count=len(item.items)) color = colors[i] color.setAlpha(100) gr.setBrush(QBrush(color)) gr.setPen(QPen(Qt.NoPen)) vennitems.append(gr) self.vennwidget.setItems(vennitems) for i, area in enumerate(self.vennwidget.vennareas()): area_items = list(map(str, list(self.disjoint[i]))) if i: area.setText("{0}".format(len(area_items))) label = disjoint_set_label(i, n, simplify=False) head = "<h4>|{}| = {}</h4>".format(label, len(area_items)) if len(area_items) > 32: items_str = ", ".join(map(escape, area_items[:32])) hidden = len(area_items) - 32 tooltip = ("{}<span>{}, ...</br>({} items not shown)<span>" .format(head, items_str, hidden)) elif area_items: tooltip = "{}<span>{}</span>".format( head, ", ".join(map(escape, area_items)) ) else: tooltip = head area.setToolTip(tooltip) area.setPen(QPen(QColor(10, 10, 10, 200), 1.5)) area.setFlag(QGraphicsPathItem.ItemIsSelectable, True) area.setSelected(i in oldselection) self._updating = False self._on_selectionChanged()
class mdsplotutils(plotutils): NoFlags, Selected, Highlight = 0, 1, 2 NoFill, Filled = 0, 1 plotstyle = namespace( selected_pen=make_pen(Qt.yellow, width=3, cosmetic=True), highligh_pen=QtGui.QPen(Qt.blue, 1), selected_brush=None, default_color=QtGui.QColor(Qt.darkGray).rgba(), discrete_palette=colorpalette.ColorPaletteHSV(), continuous_palette=colorpalette.ContinuousPaletteGenerator( QtGui.QColor(220, 220, 220), QtGui.QColor(0, 0, 0), False), symbols=ScatterPlotItem.Symbols, point_size=10, min_point_size=5, ) @staticmethod def column_data(table, var, mask=None): col, _ = table.get_column_view(var) dtype = float if var.is_primitive() else object col = numpy.asarray(col, dtype=dtype) if mask is not None: mask = numpy.asarray(mask, dtype=bool) return col[mask] else: return col @staticmethod def color_data(table, var=None, mask=None, plotstyle=None): N = len(table) if mask is not None: mask = numpy.asarray(mask, dtype=bool) N = numpy.count_nonzero(mask) if plotstyle is None: plotstyle = mdsplotutils.plotstyle if var is None: col = numpy.zeros(N, dtype=float) color_data = numpy.full(N, plotstyle.default_color, dtype=object) elif var.is_primitive(): col = mdsplotutils.column_data(table, var, mask) if var.is_discrete: palette = plotstyle.discrete_palette color_data = plotutils.discrete_colors(col, nvalues=len(var.values), palette=palette) elif var.is_continuous: color_data = plotutils.continuous_colors( col, palette=plotstyle.continuous_palette) else: raise TypeError("Discrete/Continuous variable or None expected.") return color_data @staticmethod def pen_data(basecolors, flags=None, plotstyle=None): if plotstyle is None: plotstyle = mdsplotutils.plotstyle pens = numpy.array([ mdsplotutils.make_pen(QtGui.QColor(*rgba), width=1) for rgba in basecolors ], dtype=object) if flags is None: return pens selected_mask = flags & mdsplotutils.Selected if numpy.any(selected_mask): pens[selected_mask.astype(bool)] = plotstyle.selected_pen highlight_mask = flags & mdsplotutils.Highlight if numpy.any(highlight_mask): pens[highlight_mask.astype(bool)] = plotstyle.hightlight_pen return pens @staticmethod def brush_data(basecolors, flags=None, plotstyle=None): if plotstyle is None: plotstyle = mdsplotutils.plotstyle brush = numpy.array([ mdsplotutils.make_brush(QtGui.QColor(r, g, b)) for r, g, b in basecolors ], dtype=object) if flags is None: return brush fill_mask = flags & mdsplotutils.Filled if not numpy.all(fill_mask): brush[~fill_mask] = QtGui.QBrush(Qt.NoBrush) return brush @staticmethod def shape_data(table, var, mask=None, plotstyle=None): if plotstyle is None: plotstyle = mdsplotutils.plotstyle N = len(table) if mask is not None: mask = numpy.asarray(mask, dtype=bool) N = numpy.nonzero(mask) if var is None: return numpy.full(N, "o", dtype=object) elif var.is_discrete: shape_data = mdsplotutils.column_data(table, var, mask) maxsymbols = len(plotstyle.symbols) - 1 validmask = numpy.isfinite(shape_data) shape = shape_data % (maxsymbols - 1) shape[~validmask] = maxsymbols # Special symbol for unknown values symbols = numpy.array(list(plotstyle.symbols)) shape_data = symbols[numpy.asarray(shape, dtype=int)] if mask is None: return shape_data else: return shape_data[mask] else: raise TypeError() @staticmethod def size_data(table, var, mask=None, plotstyle=None): if plotstyle is None: plotstyle = mdsplotutils.plotstyle N = len(table) if mask is not None: mask = numpy.asarray(mask, dtype=bool) N = numpy.nonzero(mask) if var is None: return numpy.full(N, plotstyle.point_size, dtype=float) else: size_data = mdsplotutils.column_data(table, var, mask) size_data = mdsplotutils.normalized(size_data) size_mask = numpy.isnan(size_data) size_data = size_data * plotstyle.point_size + \ plotstyle.min_point_size size_data[size_mask] = plotstyle.min_point_size - 2 if mask is None: return size_data else: return size_data[mask] @staticmethod def make_pen(color, width=1, cosmetic=True): pen = QtGui.QPen(color) pen.setWidthF(width) pen.setCosmetic(cosmetic) return pen @staticmethod def make_brush(color, ): return QtGui.QBrush(color, )