Changeset 8711:2e3e036374fc in orange


Ignore:
Timestamp:
08/15/11 11:26:55 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
40448e23dd24750ee2e81fadfe4edc4530282233
Message:

Speed up OWDiscretize's rug, and make sure axes are update when adding or removing curves.

Location:
orange/OrangeWidgets
Files:
2 edited

Legend:

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

    r8691 r8711  
    1010from plot.owplot import * 
    1111from plot.owcurve import * 
     12from plot.owtools import UnconnectedLinesCurve 
    1213import OWGUI 
    1314import math 
     
    155156            freqfac = maxf > 1e-6 and .1 / maxf or 1 
    156157             
    157             self.block_update = True 
     158            xData = sum(([val, val] for val, freq in freqhigh), []) + sum(([val, val] for val, freq in freqlow), []) 
     159            yData = sum(([1.0, 1.0 - max(0.02, freqfac * freq)] for val, freq in freqhigh), []) + sum(([0.04, 0.04 + max(.02, freqfac * freq)] for val, freq in freqlow), []) 
    158160             
    159             for val, freq in freqhigh: 
    160                 c = self.addCurve("", Qt.gray, Qt.gray, 1, style = Qt.SolidLine, symbol = OWPoint.NoSymbol, xData = [val, val], yData = [1.0, 1.0 - max(.02, freqfac * freq)], autoScale = 1) 
    161                 c.setYAxis(yRight) 
    162                 self.rugKeys.append(c) 
    163  
    164             for val, freq in freqlow: 
    165                 c = self.addCurve("", Qt.gray, Qt.gray, 1, style = Qt.SolidLine, symbol = OWPoint.NoSymbol, xData = [val, val], yData = [0.04, 0.04 + max(.02, freqfac * freq)], autoScale = 1) 
    166                 c.setYAxis(yRight) 
    167                 self.rugKeys.append(c) 
    168                  
    169             self.block_update = False 
     161            c = UnconnectedLinesCurve('rug', xData = xData, yData = yData) 
     162            c.set_auto_scale(True) 
     163            c.set_y_axis(yRight) 
     164            self.add_custom_curve(c) 
     165            self.rugKeys.append(c) 
    170166 
    171167        if not noUpdate: 
     
    182178                self.baseCurveX, self.baseCurveY = self.computeAddedScore(list(self.curCutPoints)) 
    183179             
    184             self.baseCurveKey = self.addCurve("", Qt.black, Qt.black, 1, style = Qt.SolidLine, symbol = OWPoint.NoSymbol, xData = self.baseCurveX, yData = self.baseCurveY, lineWidth = 2, autoScale = 1) 
    185             self.baseCurveKey.setYAxis(yLeft) 
     180            self.baseCurveKey = self.addCurve("", Qt.black, Qt.black, 1, style = Qt.SolidLine, symbol = OWPoint.NoSymbol, xData = self.baseCurveX, yData = self.baseCurveY, lineWidth = 2, autoScale = 1, y_axis_key = yLeft) 
    186181 
    187182        if not noUpdate: 
     
    195190 
    196191        if self.lookaheadCurveX and self.master.showLookaheadLine: 
    197             self.lookaheadCurveKey = self.addCurve("", Qt.black, Qt.black, 1, style = Qt.SolidLine, symbol = OWPoint.NoSymbol, xData = self.lookaheadCurveX, yData = self.lookaheadCurveY, lineWidth = 1, autoScale = 1) 
    198             self.lookaheadCurveKey.setYAxis(yLeft) 
    199             #self.lookaheadCurveKey.setVisible(1) 
     192            self.lookaheadCurveKey = self.addCurve("", Qt.black, Qt.black, 1, style = Qt.SolidLine, symbol = OWPoint.NoSymbol, xData = self.lookaheadCurveX, yData = self.lookaheadCurveY, lineWidth = 1, autoScale = 1, x_axis_key=yLeft) 
    200193 
    201194        if not noUpdate: 
     
    210203        if self.contingency and self.condProb and self.master.showTargetClassProb: 
    211204            xData = self.contingency.keys()[1:-1] 
    212             self.probCurveKey = self.addCurve("", Qt.gray, Qt.gray, 1, style = Qt.SolidLine, symbol = OWPoint.NoSymbol, xData = xData, yData = [self.condProb(x)[self.master.targetClass] for x in xData], lineWidth = 2, autoScale = 1) 
    213             self.probCurveKey.setYAxis(yRight) 
     205            self.probCurveKey = self.addCurve("", Qt.gray, Qt.gray, 1, style = Qt.SolidLine, symbol = OWPoint.NoSymbol, xData = xData, yData = [self.condProb(x)[self.master.targetClass] for x in xData], lineWidth = 2, autoScale = 1, y_axis_key = yRight) 
    214206 
    215207        if not noUpdate: 
     
    226218 
    227219        for cut in self.curCutPoints: 
    228             c = self.addCurve("", Qt.blue, Qt.blue, 1, style = Qt.DashLine, symbol = OWPoint.NoSymbol, xData = [cut, cut], yData = [.9, 0.1], autoScale = 1) 
    229             c.setYAxis(yRight) 
     220            c = self.addCurve("", Qt.blue, Qt.blue, 1, style = Qt.DashLine, symbol = OWPoint.NoSymbol, xData = [cut, cut], yData = [.9, 0.1], autoScale = 1, y_axis_key = yRight) 
    230221            self.cutLineKeys.append(c) 
    231222 
     
    256247    def addCutPoint(self, cut): 
    257248        self.curCutPoints.append(cut) 
    258         c = self.addCurve("", Qt.blue, Qt.blue, 1, style = Qt.DashLine, symbol = OWPoint.NoSymbol, xData = [cut, cut], yData = [1.0, 0.015], autoScale = 1) 
    259         c.setYAxis(yRight) 
     249        c = self.addCurve("", Qt.blue, Qt.blue, 1, style = Qt.DashLine, symbol = OWPoint.NoSymbol, xData = [cut, cut], yData = [1.0, 0.015], autoScale = 1, y_axis_key = yRight) 
    260250        self.cutLineKeys.append(c) 
    261251        c.curveInd = len(self.cutLineKeys) - 1 
  • orange/OrangeWidgets/plot/owplot.py

    r8710 r8711  
    630630            :obj:`.OWCurve.name` is added to the legend.  
    631631             
     632            This function recalculates axis bounds and replots the plot if needed.  
     633             
    632634            :param curve: The curve to add 
    633635            :type curve: :obj:`.OWCurve` 
     
    643645            curve.setToolTip(curve.tooltip) 
    644646        x,y = curve.axes() 
    645         curve.set_graph_transform(self.transform_for_axes(x,y)) 
    646         curve.update_properties() 
     647        if curve.is_auto_scale() and (self.is_axis_auto_scale(x) or self.is_axis_auto_scale(y)): 
     648            self.set_dirty() 
     649            self.replot() 
     650        else: 
     651            curve.set_graph_transform(self.transform_for_axes(x,y)) 
     652            curve.update_properties() 
    647653        return curve 
    648654         
     
    787793        ''' 
    788794        self.axes[axis_id] = axis 
     795        self.replot() 
    789796         
    790797    def add_marker(self, name, x, y, alignment = -1, bold = 0, color = None, brushColor = None, size=None, antiAlias = None,  
     
    949956                ## This class only sets the lines for these four axes, widgets are responsible for the rest 
    950957                if x in self.axes and y in self.axes: 
    951                     rect = self.data_rect_for_axes(x,y) 
    952                     if id == xBottom: 
    953                         line = QLineF(rect.topLeft(), rect.topRight()) 
    954                     elif id == xTop: 
    955                         line = QLineF(rect.bottomLeft(), rect.bottomRight()) 
    956                     elif id == yLeft: 
    957                         line = QLineF(rect.topLeft(), rect.bottomLeft()) 
    958                     elif id == yRight: 
    959                         line = QLineF(rect.topRight(), rect.bottomRight()) 
    960                     else: 
    961                         line = None 
    962                     item.data_line = line 
    963             if item.data_line: 
     958                    item.data_line = self.axis_line(self.data_rect_for_axes(x,y), id) 
     959            if id in CartesianAxes: 
     960                item.graph_line = self.axis_line(self.graph_area, id, invert_y = True) 
     961            elif item.data_line: 
    964962                t = self.transform_for_axes(x, y) 
    965                 graph_line = t.map(item.data_line) 
    966                 if item.zoomable: 
    967                     item.graph_line = self._zoom_transform.map(graph_line) 
    968                 else: 
    969                     item.graph_line = graph_line 
     963                item.graph_line = t.map(item.data_line) 
     964             
     965            if item.graph_line and item.zoomable: 
     966                item.graph_line = self._zoom_transform.map(item.graph_line) 
     967                 
    970968            if not zoom_only: 
    971                 if item.data_line and item.graph_line: 
     969                if item.graph_line: 
    972970                    item.show() 
    973971                else: 
     
    983981            This functions redraws everything on the graph, so it can be very slow 
    984982        ''' 
    985         if self.is_dirty(): 
    986             self._bounds_cache = {} 
    987             self._transform_cache = {} 
    988             self.set_clean() 
     983        self._bounds_cache = {} 
     984        self._transform_cache = {} 
     985        self.set_clean() 
    989986        self.update_antialiasing() 
    990987        self.update_legend() 
     
    16111608        if self.widget: 
    16121609            self.widget.progressBarFinished() 
     1610             
     1611    def is_axis_auto_scale(self, axis_id): 
     1612        if axis_id not in self.axes: 
     1613            return axis_id not in self.data_range 
     1614        return self.axes[axis_id].auto_scale 
     1615 
     1616    def axis_line(self, rect, id, invert_y = False): 
     1617        if invert_y: 
     1618            r = QRectF(rect) 
     1619            r.setTop(rect.bottom()) 
     1620            r.setBottom(rect.top()) 
     1621            rect = r 
     1622        if id == xBottom: 
     1623            line = QLineF(rect.topLeft(), rect.topRight()) 
     1624        elif id == xTop: 
     1625            line = QLineF(rect.bottomLeft(), rect.bottomRight()) 
     1626        elif id == yLeft: 
     1627            line = QLineF(rect.topLeft(), rect.bottomLeft()) 
     1628        elif id == yRight: 
     1629            line = QLineF(rect.topRight(), rect.bottomRight()) 
     1630        else: 
     1631            line = None 
     1632        return line 
     1633         
Note: See TracChangeset for help on using the changeset viewer.