Changeset 8696:0f1e1ad938b5 in orange


Ignore:
Timestamp:
08/14/11 11:31:08 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
50eb36534d1cf39993d2725e368e8f603b9901e2
Message:

Add validData checks to set_main_curve_data() and use it in LinProj.

Location:
orange/OrangeWidgets
Files:
6 edited

Legend:

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

    r8691 r8696  
    7272        self.current_tooltip_point = None 
    7373        self.point_hovered.connect(self.draw_tooltips) 
     74         
     75        self.value_line_curves = [] 
    7476 
    7577    def setData(self, data, subsetData = None, **args): 
     
    8587    # update shown data. Set labels, coloring by className .... 
    8688    def updateData(self, labels = None, setAnchors = 0, **args): 
     89        for c in self._extra_curves: 
     90            c.detach() 
    8791        self._extra_curves = [] 
    88         self.clear() 
    8992        self.tooltipMarkers = [] 
     93        for c in self.value_line_curves: 
     94            c.detach() 
     95        self.value_line_curves = [] 
     96        self.legend().clear() 
    9097 
    9198        self.__dict__.update(args) 
     
    165172        x_positions = projData[0] 
    166173        y_positions = projData[1] 
     174         
    167175        xPointsToAdd = {} 
    168176        yPointsToAdd = {} 
    169  
    170177 
    171178        if self.showProbabilities and self.haveData and self.dataHasClass: 
     
    186193 
    187194 
     195        if self.useDifferentColors: 
     196            if self.dataHasDiscreteClass: 
     197                color_data = [QColor(*self.discPalette.getRGB(i)) for i in self.originalData[self.dataClassIndex]] 
     198            elif self.dataHasContinuousClass:     
     199                color_data = [QColor(*self.contPalette.getRGB(i)) for i in self.originalData[self.dataClassIndex]] 
     200            else: 
     201                color_data = [Qt.black] 
     202        else: 
     203            color_data = [Qt.black] 
     204                         
     205        if self.useDifferentSymbols and self.dataHasDiscreteClass: 
     206            symbol_data = [self.curveSymbols[int(i)] for i in self.originalData[self.dataClassIndex]] 
     207        else: 
     208            symbol_data = [OWPoint.Ellipse] 
     209             
     210        size_data = [self.point_width] 
     211        label_data = [] 
     212         
     213        if self.haveSubsetData: 
     214            subset_ids = [example.id for example in self.rawSubsetData] 
     215            marked_data = [example.id in subset_ids for example in self.rawData] 
     216            showFilled = 0 
     217        else: 
     218            marked_data = [] 
     219 
     220        self.set_main_curve_data(x_positions, y_positions, color_data, label_data, size_data, symbol_data, marked_data, validData) 
     221         
    188222        # ############################################################## 
    189223        # show model quality 
     
    211245                    else: 
    212246                        fillColor = edgeColor = (0,0,0) 
    213                     self.addCurve(str(i), QColor(*fillColor+ (self.alphaValue,)), QColor(*edgeColor+ (self.alphaValue,)), self.pointWidth, xData = [x_positions[i]], yData = [y_positions[i]]) 
    214247                    if self.showValueLines: 
    215248                        self.addValueLineCurve(x_positions[i], y_positions[i], edgeColor, i, indices) 
     
    224257                    else: 
    225258                        fillColor = edgeColor = (0,0,0) 
    226                     self.addCurve(str(i), QColor(*fillColor+ (self.alphaValue,)), QColor(*edgeColor+ (self.alphaValue,)), self.pointWidth, xData = [x_positions[i]], yData = [y_positions[i]]) 
    227259                    if self.showValueLines: 
    228260                        self.addValueLineCurve(x_positions[i], y_positions[i], edgeColor, i, indices) 
     
    254286                    curveSymbol = self.curveSymbols[0] 
    255287 
    256                 if not xPointsToAdd.has_key((newColor, curveSymbol,0)): 
    257                     xPointsToAdd[(newColor, curveSymbol,0)] = [] 
    258                     yPointsToAdd[(newColor, curveSymbol,0)] = [] 
    259                 xPointsToAdd[(newColor, curveSymbol,0)].append(x_positions[i]) 
    260                 yPointsToAdd[(newColor, curveSymbol,0)].append(y_positions[i]) 
    261288                if self.showValueLines: 
    262289                    self.addValueLineCurve(x_positions[i], y_positions[i], newColor, i, indices) 
    263290 
    264291                self.addTooltipKey(x_positions[i], y_positions[i], QColor(*newColor), i) 
    265  
    266             # if we have a data subset that contains examples that don't exist in the original dataset we show them here 
    267             XAnchors = numpy.array([val[0] for val in self.anchorData]) 
    268             YAnchors = numpy.array([val[1] for val in self.anchorData]) 
    269             anchorRadius = numpy.sqrt(XAnchors*XAnchors + YAnchors*YAnchors) 
    270             validSubData = self.getValidSubsetList(indices) 
    271             projSubData = self.createProjectionAsNumericArray(indices, validData = validSubData, scaleFactor = self.scaleFactor, normalize = self.normalizeExamples, jitterSize = -1, useAnchorData = 1, removeMissingData = 0, useSubsetData = 1).T 
    272             sub_x_positions = projSubData[0] 
    273             sub_y_positions = projSubData[1] 
    274  
    275             for i in range(len(self.rawSubsetData)): 
    276                 if not validSubData[i]: continue    # check if has missing values 
    277  
    278                 if not self.dataHasClass or self.rawSubsetData[i].getclass().isSpecial(): 
    279                     newColor = (0,0,0) 
    280                 else: 
    281                     if self.dataHasDiscreteClass: 
    282                         newColor = self.discPalette.getRGB(self.originalSubsetData[self.dataClassIndex][i]) 
    283                     else: 
    284                         newColor = self.contPalette.getRGB(self.noJitteringScaledSubsetData[self.dataClassIndex][i]) 
    285  
    286                 if self.useDifferentSymbols and self.dataHasDiscreteClass and self.validSubsetDataArray[self.dataClassIndex][i]: 
    287                     curveSymbol = self.curveSymbols[int(self.originalSubsetData[self.dataClassIndex][i])] 
    288                 else: 
    289                     curveSymbol = self.curveSymbols[0] 
    290  
    291                 if not xPointsToAdd.has_key((newColor, curveSymbol, 1)): 
    292                     xPointsToAdd[(newColor, curveSymbol, 1)] = [] 
    293                     yPointsToAdd[(newColor, curveSymbol, 1)] = [] 
    294                 xPointsToAdd[(newColor, curveSymbol, 1)].append(sub_x_positions[i]) 
    295                 yPointsToAdd[(newColor, curveSymbol, 1)].append(sub_y_positions[i]) 
    296292 
    297293        elif not self.dataHasClass: 
     
    304300                if self.showValueLines: 
    305301                    self.addValueLineCurve(x_positions[i], y_positions[i], (0,0,0), i, indices) 
    306             self.addCurve(str(1), QColor(0,0,0,self.alphaValue), QColor(0,0,0,self.alphaValue), self.pointWidth, symbol = self.curveSymbols[0], xData = xs, yData = ys, penAlpha = self.alphaValue, brushAlpha = self.alphaValue) 
    307302 
    308303        # ############################################################## 
     
    313308                if not validData[i]: continue 
    314309                newColor = self.contPalette.getRGB(self.noJitteringScaledData[self.dataClassIndex][i]) 
    315                 self.addCurve(str(i), QColor(*newColor+ (self.alphaValue,)), QColor(*newColor+ (self.alphaValue,)), self.pointWidth, symbol = OWPoint.Ellipse, xData = [x_positions[i]], yData = [y_positions[i]]) 
    316310                if self.showValueLines: 
    317311                    self.addValueLineCurve(x_positions[i], y_positions[i], newColor, i, indices) 
     
    326320                if self.useDifferentColors: newColor = self.discPalette.getRGB(self.originalData[self.dataClassIndex][i]) 
    327321                else:                       newColor = (0,0,0) 
    328                 if self.useDifferentSymbols: curveSymbol = self.curveSymbols[int(self.originalData[self.dataClassIndex][i])] 
    329                 else:                        curveSymbol = self.curveSymbols[0] 
    330                 if not xPointsToAdd.has_key((newColor, curveSymbol, self.showFilledSymbols)): 
    331                     xPointsToAdd[(newColor, curveSymbol, self.showFilledSymbols)] = [] 
    332                     yPointsToAdd[(newColor, curveSymbol, self.showFilledSymbols)] = [] 
    333                 xPointsToAdd[(newColor, curveSymbol, self.showFilledSymbols)].append(x_positions[i]) 
    334                 yPointsToAdd[(newColor, curveSymbol, self.showFilledSymbols)].append(y_positions[i]) 
    335322                if self.showValueLines: 
    336323                    self.addValueLineCurve(x_positions[i], y_positions[i], newColor, i, indices) 
     
    342329                curve = UnconnectedLinesCurve("", QPen(QColor(*color + (self.alphaValue,))), self.valueLineCurves[0][color], self.valueLineCurves[1][color]) 
    343330                curve.attach(self) 
    344  
    345         # draw all the points with a small number of curves 
    346         for i, (color, symbol, showFilled) in enumerate(xPointsToAdd.keys()): 
    347             xData = xPointsToAdd[(color, symbol, showFilled)] 
    348             yData = yPointsToAdd[(color, symbol, showFilled)] 
    349             self.addCurve(str(i), QColor(*color + (self.alphaValue,)), QColor(*color + (self.alphaValue,)), self.pointWidth, symbol = symbol, xData = xData, yData = yData, showFilledSymbols = showFilled) 
     331                self.value_line_curves.append(curve) 
     332 
    350333 
    351334        # ############################################################## 
     
    393376        self.valueLineCurves[0][color] = self.valueLineCurves[0].get(color, []) + xs 
    394377        self.valueLineCurves[1][color] = self.valueLineCurves[1].get(color, []) + ys 
    395  
    396378 
    397379    def mousePressEvent(self, e): 
  • orange/OrangeWidgets/Visualize Qt/OWLinProjQt.py

    r8687 r8696  
    6464            self.graph = OWLinProjGraph(self, self.mainArea, name) 
    6565        self.mainArea.layout().addWidget(self.graph) 
    66  
     66         
    6767        # graph variables 
    6868        self.graph.manualPositioning = 0 
     
    110110        self.GeneralTab = OWGUI.createTabPage(self.tabs, "Main") 
    111111        self.SettingsTab = OWGUI.createTabPage(self.tabs, "Settings", canScroll = 1) 
    112  
     112        self.PerformanceTab = OWGUI.createTabPage(self.tabs, "Performance") 
     113         
    113114        #add controls to self.controlArea widget 
    114115        self.createShowHiddenLists(self.GeneralTab, callback = self.updateGraphAndAnchors) 
     
    162163        OWGUI.checkBox(box, self, 'graph.useDifferentColors', 'Use different colors', callback = self.updateGraph, tooltip = "Show different class values using different colors") 
    163164        self.graph.gui.filled_symbols_check_box(box) 
    164         self.graph.gui.antialiasing_check_box(box) 
    165165        wbox = OWGUI.widgetBox(box, orientation = "horizontal") 
    166166        OWGUI.checkBox(wbox, self, 'graph.showProbabilities', 'Show probabilities'+'  ', callback = self.updateGraph, tooltip = "Show a background image with class probabilities") 
     
    189189 
    190190        self.SettingsTab.layout().addStretch(100) 
     191         
     192        self.graph.gui.effects_box(self.PerformanceTab, ) 
     193        self.PerformanceTab.layout().addStretch(100) 
    191194 
    192195        self.icons = self.createAttributeIconDict() 
  • orange/OrangeWidgets/Visualize Qt/OWScatterPlotGraphQt.py

    r8691 r8696  
    195195        else: 
    196196            marked_data = [] 
    197         self.set_main_curve_data(xData, yData, colorData, labelData, sizeData, shapeData, marked_data=marked_data) 
     197        self.set_main_curve_data(xData, yData, colorData, labelData, sizeData, shapeData, marked_data, validData) 
    198198         
    199199        ''' 
  • orange/OrangeWidgets/plot/owplot.py

    r8694 r8696  
    673673        return self.add_custom_curve(c, enableLegend) 
    674674                 
    675     def set_main_curve_data(self, x_data, y_data, color_data, label_data, size_data, shape_data, marked_data = [], x_axis_key=xBottom, y_axis_key=yLeft): 
     675    def set_main_curve_data(self, x_data, y_data, color_data, label_data, size_data, shape_data, marked_data = [], valid_data = [], x_axis_key=xBottom, y_axis_key=yLeft): 
    676676        """ 
    677677            Creates a single curve that can have points of different colors, shapes and sizes.  
     
    710710             
    711711        self.update_performance(len(x_data)) 
    712  
     712         
     713        if len(valid_data): 
     714            import numpy 
     715            x_data = numpy.compress(valid_data, x_data) 
     716            y_data = numpy.compress(valid_data, y_data) 
     717            if len(color_data) > 1: 
     718                color_data = numpy.compress(valid_data, color_data) 
     719            if len(size_data) > 1: 
     720                size_data = numpy.compress(valid_data, size_data) 
     721            if len(shape_data) > 1: 
     722                shape_data = numpy.compress(valid_data, shape_data) 
     723            if len(label_data) > 1: 
     724                label_data = numpy.compress(valid_data, label_data) 
     725         
    713726        c = self.main_curve 
    714727        c.set_data(x_data, y_data) 
  • orange/OrangeWidgets/plot/owplotgui.py

    r8681 r8696  
    226226    Spacing = 0 
    227227         
    228     Antialiasing = 1 
    229228    ShowLegend = 2 
    230229    ShowFilledSymbols = 3 
     
    232231    PointSize = 5 
    233232    AlphaValue = 6 
    234     UseAnimations = 7 
    235233     
    236234    Zoom = 11 
     
    381379         
    382380    _functions = { 
    383         Antialiasing : antialiasing_check_box, 
    384381        ShowLegend : show_legend_check_box, 
    385382        ShowFilledSymbols : filled_symbols_check_box, 
     
    387384        PointSize : point_size_slider, 
    388385        AlphaValue : alpha_value_slider, 
    389         UseAnimations : animations_check_box 
    390386        } 
    391387         
  • orange/OrangeWidgets/plot/owtools.py

    r8670 r8696  
    264264    """ 
    265265    def __init__(self, name, pen = QPen(Qt.black), xData = None, yData = None): 
    266         orangeqt.UnconnectedLinesCurve.__init__(self, xData, yData) 
     266        orangeqt.UnconnectedLinesCurve.__init__(self) 
     267        self.set_data(xData, yData) 
    267268        if pen: 
    268269            self.set_pen(pen) 
Note: See TracChangeset for help on using the changeset viewer.