Changeset 8596:8a6abd2fed97 in orange


Ignore:
Timestamp:
08/04/11 10:59:40 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
03528df182b3708adb4620618f81588de50679fe
Message:

Add a ProbablitiesCurve to show probabilities in ScatterPlot

Location:
orange/OrangeWidgets
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Prototypes/OWScatterPlotGraphQt.py

    r8476 r8596  
    149149            probData = numpy.transpose(numpy.array([scX, scY, classData])) 
    150150            probData= numpy.compress(validData, probData, axis = 0) 
    151             if probData.any(): 
    152                 self.potentialsClassifier = orange.P2NN(domain, probData, None, None, None, None) 
    153             else: 
    154                 self.potentialsClassifier = None 
     151             
    155152            sys.stderr.flush() 
    156153            self.xmin = xmin; self.xmax = xmax 
    157154            self.ymin = ymin; self.ymax = ymax 
    158  
     155             
     156            if probData.any(): 
     157                self.potentialsClassifier = orange.P2NN(domain, probData, None, None, None, None) 
     158                ProbabilitiesItem(self.potentialsClassifier, self.squareGranularity, self.spaceBetweenCells).attach(self)             
     159            else: 
     160                self.potentialsClassifier = None 
     161             
    159162        # ############################################################## 
    160163        # if we have insideColors defined 
     
    471474    def computePotentials(self): 
    472475        import orangeom 
    473         rx = self.transform(xBottom, self.xmax) - self.transform(xBottom, self.xmin) 
    474         ry = self.transform(yLeft, self.ymin) - self.transform(yLeft, self.ymax) 
     476        s = self.graph_area.toRect().size() 
     477        qDebug('Computing potentials with size ' + repr(s)) 
     478        if not s.isValid(): 
     479            self.potentialsImage = QImage() 
     480            return 
     481        rx = s.width() 
     482        ry = s.height() 
    475483        rx -= rx % self.squareGranularity 
    476484        ry -= ry % self.squareGranularity 
    477485 
    478         ox = self.transform(xBottom, 0) - self.transform(xBottom, self.xmin) 
    479         oy = self.transform(yLeft, self.ymin) - self.transform(yLeft, 0) 
     486        ox = int(self.transform(xBottom, 0) - self.transform(xBottom, self.xmin)) 
     487        oy = int(self.transform(yLeft, self.ymin) - self.transform(yLeft, 0)) 
    480488 
    481489        if not getattr(self, "potentialsImage", None) or getattr(self, "potentialContext", None) != (rx, ry, self.shownXAttribute, self.shownYAttribute, self.squareGranularity, self.jitterSize, self.jitterContinuous, self.spaceBetweenCells): 
    482             if self.potentialsClassifier.classVar.varType == orange.VarTypes.Continuous: 
    483                 imagebmp = orangeom.potentialsBitmap(self.potentialsClassifier, rx, ry, ox, oy, self.squareGranularity, 1)  # the last argument is self.trueScaleFactor (in LinProjGraph...) 
    484                 palette = [qRgb(255.*i/255., 255.*i/255., 255-(255.*i/255.)) for i in range(255)] + [qRgb(255, 255, 255)] 
    485             else: 
    486                 imagebmp, nShades = orangeom.potentialsBitmap(self.potentialsClassifier, rx, ry, ox, oy, self.squareGranularity, 1., self.spaceBetweenCells) # the last argument is self.trueScaleFactor (in LinProjGraph...) 
    487                 palette = [] 
    488                 sortedClasses = getVariableValuesSorted(self.potentialsClassifier.domain.classVar) 
    489                 for cls in self.potentialsClassifier.classVar.values: 
    490                     color = self.discPalette.getRGB(sortedClasses.index(cls)) 
    491                     towhite = [255-c for c in color] 
    492                     for s in range(nShades): 
    493                         si = 1-float(s)/nShades 
    494                         palette.append(qRgb(*tuple([color[i]+towhite[i]*si for i in (0, 1, 2)]))) 
    495                 palette.extend([qRgb(255, 255, 255) for i in range(256-len(palette))]) 
    496  
    497             self.potentialsImage = QImage(imagebmp, rx, ry, QImage.Format_Indexed8) 
    498             self.potentialsImage.setColorTable(ColorPalette.signedPalette(palette) if qVersion() < "4.5" else palette) 
    499             self.potentialsImage.setNumColors(256) 
    500490            self.potentialContext = (rx, ry, self.shownXAttribute, self.shownYAttribute, self.squareGranularity, self.jitterSize, self.jitterContinuous, self.spaceBetweenCells) 
    501491            self.potentialsImageFromClassifier = self.potentialsClassifier 
  • orange/OrangeWidgets/plot/owconstants.py

    r8549 r8596  
    1818CartesianAxes = XAxes + YAxes 
    1919 
    20 SelectionZValue = -100 
     20ProbabilitiesZValue = -20 
     21SelectionZValue = -10 
    2122AxisZValue = -2 
    2223PlotZValue = 0 
  • orange/OrangeWidgets/plot/owtools.py

    r8547 r8596  
    3939 
    4040from owcurve import * 
     41 
     42from Orange.preprocess.scaling import get_variable_values_sorted 
     43import orangeom 
     44import ColorPalette 
    4145 
    4246def resize_plot_item_list(lst, size, item_type, parent): 
     
    189193class UnconnectedLinesCurve(orangeplot.UnconnectedLinesCurve): 
    190194    def __init__(self, name, pen = QPen(Qt.black), xData = None, yData = None): 
     195        qDebug('Creting an ULC') 
    191196        orangeplot.UnconnectedLinesCurve.__init__(self, xData, yData) 
    192197        if pen: 
     
    233238        self._item.setPos(self.graph_transform().map(self._data_point)) 
    234239 
     240class ProbabilitiesItem(orangeplot.PlotItem): 
     241    def __init__(self, classifier, granularity, spacing): 
     242        orangeplot.PlotItem.__init__(self) 
     243        self.classifier = classifier 
     244        self.rect = QRectF() 
     245        self.granularity = granularity 
     246        self.spacing = spacing 
     247        self.pixmap_item = QGraphicsPixmapItem(self) 
     248        self.setZValue(ProbabilitiesZValue) 
     249         
     250    def update_properties(self): 
     251        ## Mostly copied from OWScatterPlotGraph 
     252        if not self.plot(): 
     253            return 
     254             
     255        x,y = self.axes() 
     256        self.rect = self.plot().data_rect_for_axes(x,y) 
     257        s = self.graph_transform().mapRect(self.rect).size().toSize() 
     258        if not s.isValid(): 
     259            return 
     260        rx = s.width() 
     261        ry = s.height() 
     262         
     263        rx -= rx % self.granularity 
     264        ry -= ry % self.granularity 
     265         
     266        """ 
     267        NOTE: This seems to cause a discrepancy with the old ScatterPlot 
     268         
     269        p = self.graph_transform().map(QPointF(0, 0)) - self.graph_transform().map(self.rect.topLeft()) 
     270        p = -p.toPoint() 
     271         
     272        ox = p.x() 
     273        oy = p.y() 
     274        """ 
     275        ox = 0 
     276        oy = 0 
     277         
     278         
     279        if self.classifier.classVar.varType == orange.VarTypes.Continuous: 
     280            imagebmp = orangeom.potentialsBitmap(self.classifier, rx, ry, ox, oy, self.granularity, 1)  # the last argument is self.trueScaleFactor (in LinProjGraph...) 
     281            palette = [qRgb(255.*i/255., 255.*i/255., 255-(255.*i/255.)) for i in range(255)] + [qRgb(255, 255, 255)] 
     282        else: 
     283            imagebmp, nShades = orangeom.potentialsBitmap(self.classifier, rx, ry, ox, oy, self.granularity, 1., self.spacing) # the last argument is self.trueScaleFactor (in LinProjGraph...) 
     284            palette = [] 
     285            sortedClasses = get_variable_values_sorted(self.classifier.domain.classVar) 
     286            for cls in self.classifier.classVar.values: 
     287                color = self.plot().discPalette.getRGB(sortedClasses.index(cls)) 
     288                towhite = [255-c for c in color] 
     289                for s in range(nShades): 
     290                    si = 1-float(s)/nShades 
     291                    palette.append(qRgb(*tuple([color[i]+towhite[i]*si for i in (0, 1, 2)]))) 
     292            palette.extend([qRgb(255, 255, 255) for i in range(256-len(palette))]) 
     293 
     294        self.potentialsImage = QImage(imagebmp, rx, ry, QImage.Format_Indexed8) 
     295        self.potentialsImage.setColorTable(ColorPalette.signedPalette(palette) if qVersion() < "4.5" else palette) 
     296        self.potentialsImage.setNumColors(256) 
     297        self.pixmap_item.setPixmap(QPixmap.fromImage(self.potentialsImage)) 
     298        self.pixmap_item.setPos(self.graph_transform().map(self.rect.bottomLeft())) 
     299     
     300    def data_rect(self): 
     301        return self.rect 
Note: See TracChangeset for help on using the changeset viewer.