Changeset 8698:4a6c614dcc88 in orange


Ignore:
Timestamp:
08/14/11 12:42:48 (3 years ago)
Author:
miha <miha.stajdohar@…>
Branch:
default
Convert:
55f3311f8f4028099b507a7af2806feb3c7a72f2
Message:

Added set_edge_sizes, set_edge_colors, set_edge_labels.

Location:
orange/OrangeWidgets/Visualize Qt
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Visualize Qt/OWNxCanvasQt.py

    r8682 r8698  
    8585 
    8686        self.show_indices = False 
    87         self.showWeights = 0 
     87        self.show_weights = False 
    8888         
    8989        self.showComponentAttribute = None 
     
    103103         
    104104        self.node_label_attributes = [] 
     105        self.edge_label_attributes = [] 
    105106         
    106107        self.axis_margin = 0 
     
    129130      self.drawPlotItems() 
    130131     
    131     def selectNeighbours(self, sel, nodes, depth, maxdepth): 
    132         #print "list: " + str(sel) 
    133         #print "nodes: " + str(nodes) 
    134         sel.update(nodes) 
    135         if depth < maxdepth: 
    136             for i in nodes: 
    137                 neighbours = set(self.graph.neighbors(i)) 
    138                 #print "neighbours: " + str(neighbours) 
    139                 self.selectNeighbours(sel, neighbours - sel, depth + 1, maxdepth) 
    140          
    141132    def selected_nodes(self): 
    142         #return [vertex.index() for vertex in self.networkCurve.nodes().itervalues() if vertex.is_selected()] 
    143         return [p.index() for p in self.selected_points()] 
     133        return [vertex.index() for vertex in self.networkCurve.nodes().itervalues() if vertex.is_selected()] 
     134        #return [p.index() for p in self.selected_points()] 
    144135         
    145136    def not_selected_nodes(self): 
     
    147138         
    148139    def marked_nodes(self): 
    149         #return [vertex.index() for vertex in self.networkCurve.nodes().itervalues() if vertex.is_marked()] 
    150         return [p.index() for p in self.marked_points()] 
     140        return [vertex.index() for vertex in self.networkCurve.nodes().itervalues() if vertex.is_marked()] 
     141        #return [p.index() for p in self.marked_points()] 
    151142         
    152143    def not_marked_nodes(self): 
     
    171162        self.networkCurve.set_node_marks(dict((i, True) for i in toMark)) 
    172163         
    173 #    def updateData(self): 
    174 #        if self.graph is None: 
    175 #            return 
    176 #         
    177 #        self.clear() 
    178 #        self.tooltipData = [] 
    179 #         
    180 #        if self.forceVectors != None: 
    181 #            for v in self.forceVectors: 
    182 #                self.addCurve("force", Qt.white, Qt.green, 1, style=QwtPlotCurve.Lines, xData=v[0], yData=v[1], showFilledSymbols=False) 
    183 #         
    184 #        for r in self.circles: 
    185 #            step = 2 * pi / 64; 
    186 #            fi = 0 
    187 #            x = [] 
    188 #            y = [] 
    189 #            for i in range(65): 
    190 #                x.append(r * cos(fi) + 5000) 
    191 #                y.append(r * sin(fi) + 5000) 
    192 #                fi += step 
    193 #                 
    194 #            self.addCurve("radius", Qt.white, Qt.green, 1, style=NetworkCurve.Lines, xData=x, yData=y, showFilledSymbols=False) 
    195 #       
    196 #        #self.networkCurve.showEdgeLabels = self.showEdgeLabels 
    197 #        self.networkCurve.attach(self) 
    198              
    199164    def drawComponentKeywords(self): 
    200165        if self.showComponentAttribute == None: 
     
    260225        return colorIndices, colorIndex, minValue, maxValue 
    261226     
    262     def set_edge_color(self, attribute): 
     227    def set_node_colors(self, attribute, nodes=None): 
     228        if self.graph is None: 
     229            return 
     230 
     231        colorIndices, colorIndex, minValue, maxValue = self.getColorIndeces(self.items, attribute, self.discPalette) 
     232        colors = {} 
     233         
     234        if nodes is None: 
     235            nodes = self.graph.nodes() 
     236         
     237        if colorIndex is not None and self.items.domain[colorIndex].varType == orange.VarTypes.Continuous and minValue == maxValue: 
     238            colors.update((node, self.discPalette[0]) for node in nodes) 
     239         
     240        elif colorIndex is not None and self.items.domain[colorIndex].varType == orange.VarTypes.Continuous: 
     241            colors.update((v, self.contPalette[(float(self.items[v][colorIndex].value) - minValue) / (maxValue - minValue)])  
     242                          if str(self.items[v][colorIndex].value) != '?' else  
     243                          (v, self.discPalette[0]) for v in nodes) 
     244 
     245        elif colorIndex is not None and self.items.domain[colorIndex].varType == orange.VarTypes.Discrete: 
     246            colors.update((v, self.discPalette[colorIndices[self.items[v][colorIndex].value]]) for v in nodes) 
     247             
     248        else: 
     249            colors.update((node, self.discPalette[0]) for node in nodes) 
     250         
     251        self.networkCurve.set_node_colors(colors) 
     252        self.replot() 
     253         
     254    def set_node_labels(self, attributes=None): 
     255        if self.graph is None: 
     256            return  
     257         
     258        nodes = self.graph.nodes() 
     259         
     260        if attributes is not None: 
     261            self.node_label_attributes = attributes 
     262         
     263        label_attributes = [] 
     264        if self.items is not None and isinstance(self.items, orange.ExampleTable): 
     265            label_attributes = [self.items.domain[att] for att in \ 
     266                self.node_label_attributes if att in self.items.domain] 
     267             
     268        indices = [[] for u in nodes] 
     269        if self.show_indices: 
     270            indices = [[str(u)] for u in nodes] 
     271             
     272        self.networkCurve.set_node_labels(dict((node, ', '.join(indices[i] + \ 
     273                           [str(self.items[node][att]) for att in \ 
     274                           label_attributes])) for i, node in enumerate(nodes))) 
     275         
     276        self.replot() 
     277         
     278     
     279    def set_edge_colors(self, attribute): 
    263280        if self.graph is None: 
    264281            return 
     
    281298            colors = [self.discEdgePalette[0] for edge in self.networkCurve.edge_indices()] 
    282299             
    283         self.networkCurve.set_edge_color(colors) 
     300        self.networkCurve.set_edge_colors(colors) 
    284301        self.replot() 
    285302         
     
    295312#                    else: 
    296313#                      self.networkCurve.set_edge_color(index, newColor) 
    297      
    298     def set_node_colors(self, attribute, nodes=None): 
    299         if self.graph is None: 
    300             return 
    301  
    302         colorIndices, colorIndex, minValue, maxValue = self.getColorIndeces(self.items, attribute, self.discPalette) 
    303         colors = {} 
    304          
    305         if nodes is None: 
    306             nodes = self.graph.nodes() 
    307          
    308         if colorIndex is not None and self.items.domain[colorIndex].varType == orange.VarTypes.Continuous and minValue == maxValue: 
    309             colors.update((node, self.discPalette[0]) for node in nodes) 
    310          
    311         elif colorIndex is not None and self.items.domain[colorIndex].varType == orange.VarTypes.Continuous: 
    312             colors.update((v, self.contPalette[(float(self.items[v][colorIndex].value) - minValue) / (maxValue - minValue)])  
    313                           if str(self.items[v][colorIndex].value) != '?' else  
    314                           (v, self.discPalette[0]) for v in nodes) 
    315  
    316         elif colorIndex is not None and self.items.domain[colorIndex].varType == orange.VarTypes.Discrete: 
    317             colors.update((v, self.discPalette[colorIndices[self.items[v][colorIndex].value]]) for v in nodes) 
    318              
    319         else: 
    320             colors.update((node, self.discPalette[0]) for node in nodes) 
    321          
    322         self.networkCurve.set_node_colors(colors) 
    323         self.replot() 
    324          
    325     def set_label_attributes(self, attributes=None): 
     314         
     315    def set_edge_labels(self, attributes=None): 
    326316        if self.graph is None: 
    327317            return  
    328318         
    329         nodes = self.graph.nodes() 
     319        edges = self.networkCurve.edge_indices() 
    330320         
    331321        if attributes is not None: 
    332             self.node_label_attributes = attributes 
     322            self.edge_label_attributes = attributes 
    333323         
    334324        label_attributes = [] 
    335         if self.items is not None and isinstance(self.items, orange.ExampleTable): 
    336             label_attributes = [self.items.domain[att] for att in \ 
    337                 self.node_label_attributes if att in self.items.domain] 
    338              
    339         indices = [[] for u in nodes] 
    340         if self.show_indices: 
    341             indices = [[str(u)] for u in nodes] 
    342              
    343         self.networkCurve.set_node_labels(dict((node, ', '.join(indices[i] + \ 
    344                            [str(self.items[node][att]) for att in \ 
    345                            label_attributes])) for i, node in enumerate(nodes))) 
     325        if self.links is not None and isinstance(self.links, orange.ExampleTable): 
     326            label_attributes = [self.links.domain[att] for att in \ 
     327                self.edge_label_attributes if att in self.links.domain] 
     328             
     329        weights = [[] for ex in edges] 
     330        if self.show_weights: 
     331            weights = [[str(self.graph[u][v])] for u,v in edges] 
     332             
     333        self.networkCurve.set_edge_labels([', '.join(weights[i] + \ 
     334                           [str(self.links[i][att]) for att in \ 
     335                           label_attributes]) for i,edge in enumerate(edges)]) 
    346336         
    347337        self.replot() 
     
    357347                   self.items[node][att]) for att in tooltip_attributes)) \ 
    358348                                                        for node in self.graph)) 
    359                          
    360     def setEdgeLabelText(self, attributes): 
    361         self.edgeLabelText = [] 
    362         if self.graph is None or self.items is None: 
    363             return 
    364349         
    365350    def change_graph(self, newgraph): 
     
    495480        self.networkCurve.set_edges(edges) 
    496481        self.networkCurve.update_properties() 
    497         self.replot() 
    498          
    499     def setEdgesSize(self): 
    500 #        if self.maxEdgeWeight > self.minEdgeWeight: 
    501 #            #print 'maxEdgeSize',self.maxEdgeSize 
    502 #            #print 'maxEdgeWeight',self.maxEdgeWeight 
    503 #            #print 'minEdgeWeight',self.minEdgeWeight 
    504 #            k = (self.maxEdgeSize - 1) / (self.maxEdgeWeight - self.minEdgeWeight) 
    505 #            for edge in self.networkCurve.edges: 
    506 #                if edge.weight == None: 
    507 #                    size = 1 
    508 #                    edge.pen = QPen(edge.pen.color(), size) 
    509 #                    edge.pen.setCapStyle(Qt.RoundCap) 
    510 #                else: 
    511 #                    if self.invertEdgeSize: 
    512 #                        size = (self.maxEdgeWeight - edge.weight - self.minEdgeWeight) * k + 1 
    513 #                    else: 
    514 #                        size = (edge.weight - self.minEdgeWeight) * k + 1 
    515 #                    edge.pen = QPen(edge.pen.color(), size) 
    516 #                    edge.pen.setCapStyle(Qt.RoundCap) 
    517 #        else: 
    518 #            for edge in self.networkCurve.edges: 
    519 #                edge.pen = QPen(edge.pen.color(), 1) 
    520 #                edge.pen.setCapStyle(Qt.RoundCap) 
    521         pass     
     482        self.replot()   
    522483     
    523484    def update_animations(self, use_animations=None): 
  • orange/OrangeWidgets/Visualize Qt/OWNxExplorerQt.py

    r8688 r8698  
    3535    "networkCanvas.antialias_points", "networkCanvas.antialias_lines",  
    3636    "networkCanvas.auto_adjust_performance", "invertSize", "optMethod",  
    37     "lastVertexSizeColumn", "lastColorColumn", "networkCanvas.show_indices", 
     37    "lastVertexSizeColumn", "lastColorColumn", "networkCanvas.show_indices", "networkCanvas.show_weights", 
    3838    "lastNameComponentAttribute", "lastLabelColumns", "lastTooltipColumns", 
    3939    "showWeights", "showEdgeLabels", "colorSettings",  
     
    169169         
    170170        colorBox = OWGUI.widgetBox(self.verticesTab, "Node color attribute", orientation="horizontal", addSpace = False) 
    171         self.colorCombo = OWGUI.comboBox(colorBox, self, "color", callback=self.setVertexColor) 
     171        self.colorCombo = OWGUI.comboBox(colorBox, self, "color", callback=self.set_node_colors) 
    172172        self.colorCombo.addItem("(same color)") 
    173173        OWGUI.button(colorBox, self, "Set node color palette", self.setColors, tooltip = "Set node color palette", debuggingEnabled = 0) 
     
    175175        ib = OWGUI.widgetBox(self.verticesTab, "Node size attribute", orientation="vertical", addSpace = False) 
    176176        hb = OWGUI.widgetBox(ib, orientation="horizontal", addSpace = False) 
    177         OWGUI.checkBox(hb, self, "invertSize", "Invert size", callback = self.set_vertex_size) 
    178         OWGUI.spin(hb, self, "minVertexSize", 5, 200, 1, label="Min:", callback=self.set_vertex_size) 
    179         OWGUI.spin(hb, self, "maxVertexSize", 5, 200, 1, label="Max:", callback=self.set_vertex_size) 
    180         self.vertexSizeCombo = OWGUI.comboBox(ib, self, "vertexSize", callback=self.set_vertex_size) 
     177        OWGUI.checkBox(hb, self, "invertSize", "Invert size", callback = self.set_node_sizes) 
     178        OWGUI.spin(hb, self, "minVertexSize", 5, 200, 1, label="Min:", callback=self.set_node_sizes) 
     179        OWGUI.spin(hb, self, "maxVertexSize", 5, 200, 1, label="Max:", callback=self.set_node_sizes) 
     180        self.vertexSizeCombo = OWGUI.comboBox(ib, self, "vertexSize", callback=self.set_node_sizes) 
    181181        self.vertexSizeCombo.addItem("(none)") 
    182182         
    183183        ib = OWGUI.widgetBox(self.verticesTab, "Node labels | tooltips", orientation="vertical", addSpace = False) 
    184         OWGUI.spin(ib, self, "fontSize", 4, 30, 1, label="Set font size:", callback = self.setFontSize) 
     184        OWGUI.spin(ib, self, "fontSize", 4, 30, 1, label="Set font size:", callback = self.set_font_size) 
    185185        hb = OWGUI.widgetBox(ib, orientation="horizontal", addSpace = False) 
    186186        self.attListBox = OWGUI.listBox(hb, self, "markerAttributes", "attributes", selectionMode=QListWidget.MultiSelection, callback=self.clickedAttLstBox) 
     
    188188         
    189189        ib = OWGUI.widgetBox(self.edgesTab, "General", orientation="vertical") 
    190         OWGUI.checkBox(ib, self, 'showWeights', 'Show weights', callback=(lambda: self._set_canvas_attr('showWeights', self.showWeights))) 
    191         OWGUI.checkBox(ib, self, 'showEdgeLabels', 'Show labels on edges', callback=(lambda: self._set_canvas_attr('showEdgeLabels', self.showEdgeLabels))) 
    192         OWGUI.spin(ib, self, "maxLinkSize", 1, 50, 1, label="Max edge width:", callback = self.setMaxLinkSize) 
     190        OWGUI.checkBox(ib, self, 'networkCanvas.show_weights', 'Show weights', callback=self.networkCanvas.set_edge_labels) 
     191        #OWGUI.checkBox(ib, self, 'showEdgeLabels', 'Show labels on edges', callback=(lambda: self._set_canvas_attr('showEdgeLabels', self.showEdgeLabels))) 
     192        OWGUI.spin(ib, self, "maxLinkSize", 1, 50, 1, label="Max edge width:", callback = self.set_edge_sizes) 
    193193        self.showDistancesCheckBox = OWGUI.checkBox(ib, self, 'showDistances', 'Explore node distances', callback=(lambda: self._set_canvas_attr('showDistances', self.showDistances)), disabled=1) 
    194194         
    195195        colorBox = OWGUI.widgetBox(self.edgesTab, "Edge color attribute", orientation="horizontal", addSpace = False) 
    196         self.edgeColorCombo = OWGUI.comboBox(colorBox, self, "edgeColor", callback=self.setEdgeColor) 
     196        self.edgeColorCombo = OWGUI.comboBox(colorBox, self, "edgeColor", callback=self.set_edge_colors) 
    197197        self.edgeColorCombo.addItem("(same color)") 
    198198        OWGUI.button(colorBox, self, "Set edge color palette", self.setEdgeColorPalette, tooltip = "Set edge color palette", debuggingEnabled = 0) 
     
    200200        self.edgeLabelBox = OWGUI.widgetBox(self.edgesTab, "Edge labels", addSpace = False) 
    201201        self.edgeLabelListBox = OWGUI.listBox(self.edgeLabelBox, self, "edgeLabelAttributes", "edgeAttributes", selectionMode=QListWidget.MultiSelection, callback=self.clickedEdgeLabelListBox) 
    202         self.edgeLabelBox.setEnabled(False) 
     202        #self.edgeLabelBox.setEnabled(False) 
    203203         
    204204        ib = OWGUI.widgetBox(self.verticesTab, "General", orientation="vertical") 
    205         OWGUI.checkBox(ib, self, 'networkCanvas.show_indices', 'Show indices', callback=self.networkCanvas.set_label_attributes) 
     205        OWGUI.checkBox(ib, self, 'networkCanvas.show_indices', 'Show indices', callback=self.networkCanvas.set_node_labels) 
    206206        OWGUI.checkBox(ib, self, 'labelsOnMarkedOnly', 'Show labels on marked nodes only', callback=(lambda: self.networkCanvas.set_labels_on_marked_only(self.labelsOnMarkedOnly))) 
    207207         
     
    349349         
    350350        self.graph_layout_method() 
    351         self.setFontSize() 
     351        self.set_font_size() 
    352352        self.set_graph(None) 
    353353        self.setMinimumWidth(900) 
     
    385385                return 
    386386            att = str(self.comboAttSelection.currentText()) 
    387             vertices = self.networkCanvas.networkCurve.get_selected_vertices() 
     387            vertices = self.networkCanvas.selected_nodes() 
    388388             
    389389            if len(vertices) != 1: 
     
    403403            return 
    404404        att = str(self.editCombo.currentText()) 
    405         vertices = self.networkCanvas.networkCurve.get_selected_vertices() 
     405        vertices = self.networkCanvas.selected_nodes() 
    406406         
    407407        if len(vertices) == 0: 
    408408            return 
    409409         
    410         if self.graph_base.items().domain[att].var_type == Orange.data.Type.Continuous: 
     410        items = self.graph_base.items() 
     411        if items.domain[att].var_type == Orange.data.Type.Continuous: 
    411412            for v in vertices: 
    412                 self.graph_base.items()[v][att] = float(self.editValue) 
     413                items[v][att] = float(self.editValue) 
    413414        else: 
    414415            for v in vertices: 
    415                 self.graph_base.items()[v][att] = str(self.editValue) 
    416          
    417         self.setItems(self.graph_base.items()) 
     416                items[v][att] = str(self.editValue) 
    418417         
    419418    def drawForce(self): 
     
    12481247#            self.graph_layout_method() 
    12491248         
    1250         self.set_vertex_size() 
    1251         self.setVertexColor() 
    1252         self.setEdgeColor() 
     1249        self.set_node_sizes() 
     1250        self.set_node_colors() 
     1251        self.set_edge_sizes() 
     1252        self.set_edge_colors() 
    12531253             
    12541254        self.networkCanvas.setEdgesSize() 
     
    13561356        self.networkCanvas.showWeights = self.showWeights 
    13571357             
    1358         self.set_vertex_size() 
    1359         self.setVertexColor() 
    1360         self.setEdgeColor() 
     1358        self.set_node_sizes() 
     1359        self.set_node_colors() 
     1360        self.set_edge_sizes() 
     1361        self.set_edge_colors() 
    13611362             
    13621363        self.networkCanvas.setEdgesSize() 
     
    13941395        self.graph_base.set_items(items) 
    13951396         
    1396         self.set_vertex_size() 
     1397        self.set_node_sizes() 
    13971398        self.networkCanvas.items = items 
    13981399        self.networkCanvas.showWeights = self.showWeights 
     
    14781479            self.networkCanvas.discPalette = dlg.getDiscretePalette("discPalette") 
    14791480             
    1480             self.setVertexColor() 
     1481            self.set_node_colors() 
    14811482             
    14821483    def setEdgeColorPalette(self): 
     
    14881489            self.networkCanvas.discEdgePalette = dlg.getDiscretePalette("discPalette") 
    14891490             
    1490             self.setEdgeColor() 
     1491            self.set_edge_colors() 
    14911492     
    14921493    def createColorDialog(self, colorSettings, selectedSchemaIndex): 
     
    16531654         
    16541655        self.lastLabelColumns = [self.attributes[i][0] for i in self.markerAttributes] 
    1655         self.networkCanvas.set_label_attributes(self.lastLabelColumns) 
     1656        self.networkCanvas.set_node_labels(self.lastLabelColumns) 
    16561657        self.networkCanvas.replot() 
    16571658   
     
    16691670         
    16701671        self.lastEdgeLabelAttributes = set([self.edgeAttributes[i][0] for i in self.edgeLabelAttributes]) 
    1671         self.networkCanvas.setEdgeLabelText(self.lastEdgeLabelAttributes) 
    1672         #self.networkCanvas.updateData() 
     1672        self.networkCanvas.set_edge_labels(self.lastEdgeLabelAttributes) 
    16731673        self.networkCanvas.replot() 
    16741674 
    1675     def setVertexColor(self): 
     1675    def set_node_colors(self): 
    16761676        if self.graph is None: 
    16771677            return 
     
    16801680        self.lastColorColumn = self.colorCombo.currentText() 
    16811681         
    1682     def setEdgeColor(self): 
     1682    def set_edge_colors(self): 
    16831683        if self.graph is None: 
    16841684            return 
    16851685         
    1686         self.networkCanvas.set_edge_color(self.edgeColorCombo.currentText()) 
     1686        self.networkCanvas.set_edge_colors(self.edgeColorCombo.currentText()) 
    16871687        self.lastEdgeColorColumn = self.edgeColorCombo.currentText() 
    16881688                   
    1689     def setGraphGrid(self): 
    1690         self.networkCanvas.enableGridY(self.networkCanvasShowGrid) 
    1691         self.networkCanvas.enableGridX(self.networkCanvasShowGrid) 
    1692      
    1693     def selectAllConnectedNodes(self): 
    1694         self.networkCanvas.selectConnectedNodes(1000000) 
    1695                  
    1696     def setMaxLinkSize(self): 
     1689    def set_edge_sizes(self): 
    16971690        if self.graph is None: 
    16981691            return 
    16991692         
    1700         self.networkCanvas.maxEdgeSize = self.maxLinkSize 
    1701         self.networkCanvas.setEdgesSize() 
     1693        self.networkCanvas.networkCurve.set_edge_sizes(self.maxLinkSize) 
    17021694        self.networkCanvas.replot() 
    17031695     
    1704     def set_vertex_size(self): 
     1696    def set_node_sizes(self): 
    17051697        if self.graph is None or self.networkCanvas is None: 
    17061698            return 
     
    17371729        self.networkCanvas.replot() 
    17381730         
    1739     def setFontSize(self): 
     1731    def set_font_size(self): 
    17401732        if self.networkCanvas is None: 
    17411733            return 
Note: See TracChangeset for help on using the changeset viewer.