def __init__(self, parent=None, signalManager=None): OWWidget.__init__(self, parent, signalManager, "Nomogram", 1) #self.setWFlags(Qt.WResizeNoErase | Qt.WRepaintNoErase) #this works like magic.. no flicker during repaint! self.parent = parent # self.setWFlags(self.getWFlags()+Qt.WStyle_Maximize) self.callbackDeposit = [] # deposit for OWGUI callback functions self.alignType = 0 self.contType = 0 self.yAxis = 0 self.probability = 0 self.verticalSpacing = 60 self.verticalSpacingContinuous = 100 self.diff_between_ordinal = 30 self.fontSize = 9 self.lineWidth = 1 self.histogram = 0 self.histogram_size = 10 self.data = None self.cl = None self.confidence_check = 0 self.confidence_percent = 95 self.sort_type = 0 self.loadSettings() self.pointsName = ["Total", "Total"] self.totalPointsName = ["Probability", "Probability"] self.bnomogram = None self.inputs = [("Classifier", orange.Classifier, self.classifier)] self.TargetClassIndex = 0 self.targetCombo = OWGUI.comboBox( self.controlArea, self, "TargetClassIndex", " Target Class ", addSpace=True, tooltip='Select target (prediction) class in the model.', callback=self.setTarget) self.alignRadio = OWGUI.radioButtonsInBox( self.controlArea, self, 'alignType', ['Align left', 'Align by zero influence'], box='Attribute placement', tooltips=[ 'Attributes in nomogram are left aligned', 'Attributes are not aligned, top scale represents true (normalized) regression coefficient value' ], addSpace=True, callback=self.showNomogram) self.verticalSpacingLabel = OWGUI.spin( self.alignRadio, self, 'verticalSpacing', 15, 200, label='Vertical spacing:', orientation=0, tooltip='Define space (pixels) between adjacent attributes.', callback=self.showNomogram) self.ContRadio = OWGUI.radioButtonsInBox( self.controlArea, self, 'contType', ['1D projection', '2D curve'], 'Continuous attributes', tooltips=[ 'Continuous attribute are presented on a single scale', 'Two dimensional space is used to present continuous attributes in nomogram.' ], addSpace=True, callback=[ lambda: self.verticalSpacingContLabel.setDisabled( not self.contType), self.showNomogram ]) self.verticalSpacingContLabel = OWGUI.spin( OWGUI.indentedBox(self.ContRadio, sep=OWGUI.checkButtonOffsetHint( self.ContRadio.buttons[-1])), self, 'verticalSpacingContinuous', 15, 200, label="Height", orientation=0, tooltip= 'Define space (pixels) between adjacent 2d presentation of attributes.', callback=self.showNomogram) self.verticalSpacingContLabel.setDisabled(not self.contType) self.yAxisRadio = OWGUI.radioButtonsInBox( self.controlArea, self, 'yAxis', ['Point scale', 'Log odds ratios'], 'Scale', tooltips=[ 'values are normalized on a 0-100 point scale', 'values on top axis show log-linear contribution of attribute to full model' ], addSpace=True, callback=self.showNomogram) layoutBox = OWGUI.widgetBox(self.controlArea, "Display", orientation=1, addSpace=True) self.probabilityCheck = OWGUI.checkBox(layoutBox, self, 'probability', 'Show prediction', tooltip='', callback=self.setProbability) self.CICheck, self.CILabel = OWGUI.checkWithSpin( layoutBox, self, 'Confidence intervals (%):', min=1, max=99, step=1, checked='confidence_check', value='confidence_percent', checkCallback=self.showNomogram, spinCallback=self.showNomogram) self.histogramCheck, self.histogramLabel = OWGUI.checkWithSpin( layoutBox, self, 'Show histogram, size', min=1, max=30, checked='histogram', value='histogram_size', step=1, tooltip='-(TODO)-', checkCallback=self.showNomogram, spinCallback=self.showNomogram) OWGUI.separator(layoutBox) self.sortOptions = [ "No sorting", "Absolute importance", "Positive influence", "Negative influence" ] self.sortBox = OWGUI.comboBox(layoutBox, self, "sort_type", label="Sort by ", items=self.sortOptions, callback=self.sortNomogram, orientation="horizontal") OWGUI.rubber(self.controlArea) self.connect(self.graphButton, SIGNAL("clicked()"), self.menuItemPrinter) #add a graph widget self.header = OWNomogramHeader(None, self.mainArea) self.header.setFixedHeight(60) self.header.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.header.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.graph = OWNomogramGraph(self.bnomogram, self.mainArea) self.graph.setMinimumWidth(200) self.graph.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.footer = OWNomogramHeader(None, self.mainArea) self.footer.setFixedHeight(60 * 2 + 10) self.footer.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.footer.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.mainArea.layout().addWidget(self.header) self.mainArea.layout().addWidget(self.graph) self.mainArea.layout().addWidget(self.footer) self.resize(700, 500) #self.repaint() #self.update() # mouse pressed flag self.mousepr = False