📄 owsomvisualizer.py
字号:
val=255-min(max(255*(self.uMat[i][j]-minDist)/(maxDist-minDist),10),245)
r.setColor(QColor(val, val, val))
self.canvasObj.append(r)
self.resize(x+self.somMap.xDim*xa*2, y+self.somMap.yDim*ya*2)
self.update()
def updateLabels(self):
for o in self.canvasObj:
if o.hasNode and len(o.node.examples):
if self.parent().labelNodes and o.node.classifier:
o.setLabel(str(o.node.classifier.defaultValue))
else:
o.setLabel("")
else:
o.setLabel("")
self.updateAll()
def updateAll(self):
self.setAllChanged()
self.update()
def clear(self):
for o in self.canvasObj:
o.setCanvas(None)
self.canvasObj=[]
class OWSOMVisualizer(OWWidget):
settingsList=["canvas.drawMode","canvas.objSize","commitOnChange", "backgroundMode", "backgroundCheck", "canvasView.includeCodebook", "canvasView.showBubbleInfo"]
contextHandlers={"":DomainContextHandler("", [ContextField("attribute", DomainContextHandler.Optional),
ContextField("discHistMode", DomainContextHandler.Optional),
ContextField("contHistMode", DomainContextHandler.Optional),
ContextField("targetValue", DomainContextHandler.Optional),
ContextField("histogram", DomainContextHandler.Optional),
ContextField("inputSet", DomainContextHandler.Optional),
ContextField("canvas.component", DomainContextHandler.Optional),
ContextField("canvasView.includeCodebook", DomainContextHandler.Optional)])}
def __init__(self, parent=None, signalManager=None, name="SOMVisualizer"):
OWWidget.__init__(self, parent, signalManager, name)
self.inputs=[("SOMMap", orangeom.SOMMap, self.setSomMap), ("SOMClassifier", orangeom.SOMClassifier, self.setSomClassifier), ("Examples", ExampleTable, self.data)]
self.outputs=[("Examples", ExampleTable)]
self.labelNodes=0
self.commitOnChange=0
self.backgroundCheck=1
self.backgroundMode=0
self.histogram=1
self.attribute=0
self.discHistMode=0
self.targetValue=0
self.contHistMode=0
self.inputSet=0
self.somMap=None
self.examples=None
layout=QVBoxLayout(self.mainArea,QVBoxLayout.TopToBottom,0)
self.canvas=SOMCanvas(self)
self.canvasView=SOMCanvasView(self, self.canvas, self.mainArea)
self.canvasView.setCanvas(self.canvas)
layout.addWidget(self.canvasView)
self.loadSettings()
call=lambda:self.canvas.redrawSom()
tabW=QTabWidget(self.controlArea)
mainTab=OWGUI.widgetBox(self.controlArea)
histTab=OWGUI.widgetBox(self.controlArea)
mainTab.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
histTab.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
self.mainTab=mainTab
self.histTab=histTab
tabW.addTab(mainTab, "Options")
tabW.addTab(histTab, "Histogram Coloring")
self.backgroundBox=QVButtonGroup("Background", mainTab)
#OWGUI.checkBox(self.backgroundBox, self, "backgroundCheck","Show background", callback=self.setBackground)
b=OWGUI.radioButtonsInBox(self.backgroundBox, self, "canvas.drawMode", ["None", "U-Matrix", "Component Planes"], callback=self.setBackground)
b.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
self.componentCombo=OWGUI.comboBox(b,self,"canvas.component", callback=self.setBackground)
self.componentCombo.setEnabled(self.canvas.drawMode==2)
OWGUI.checkBox(self.backgroundBox, self, "canvas.showGrid", "Show Grid", callback=self.canvas.updateAll)
#b=OWGUI.widgetBox(mainTab, "Histogram")
b=QVButtonGroup("Histogram", mainTab)
b.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
OWGUI.checkBox(b, self, "histogram", "Show histogram", callback=self.setHistogram)
OWGUI.radioButtonsInBox(b, self, "inputSet", ["Use training set", "Use input subset"], callback=self.setHistogram)
b1=QVBox(mainTab)
b1.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
b=OWGUI.hSlider(b1, self, "canvas.objSize","Plot size", 10,100,step=10,ticks=10, callback=call)
b.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
#OWGUI.checkBox(b1, self, "labelNodes", "Node Labeling", callback=self.canvas.updateLabels)
b1=OWGUI.widgetBox(b1, "Bubble Info")
OWGUI.checkBox(b1, self, "canvasView.showBubbleInfo","Show")
OWGUI.checkBox(b1, self, "canvasView.includeCodebook", "Include codebook vector")
b1.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
#OWGUI.checkBox(mainTab, self, "commitOnChange", "Commit on change")
QVBox(mainTab)
self.histogramBox=OWGUI.widgetBox(histTab, "Coloring")
self.attributeCombo=OWGUI.comboBox(self.histogramBox, self, "attribute", "Attribute", callback=self.setHistogram)
self.tabWidget=QTabWidget(self.histogramBox)
self.discTab=discTab=OWGUI.widgetBox(self.histogramBox)
self.contTab=contTab=OWGUI.widgetBox(self.histogramBox)
self.tabWidget.addTab(discTab, "Discrete")
self.tabWidget.addTab(contTab, "Continous")
b=QVButtonGroup(discTab)
b.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
OWGUI.radioButtonsInBox(b, self, "discHistMode", ["Pie chart", "Majority value", "Majority value prob."], callback=self.setHistogram)
#self.targetValueCombo=OWGUI.comboBox(b, self, "targetValue", callback=self.setHistogram)
QVBox(discTab)
b=QVButtonGroup(contTab)
b.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed))
OWGUI.radioButtonsInBox(b, self, "contHistMode", ["Default", "Avg. value"],callback=self.setHistogram)
QVBox(contTab)
b=OWGUI.widgetBox(self.controlArea, "Selection")
OWGUI.button(b, self, "&Invert selection", callback=self.canvasView.invertSelection)
OWGUI.button(b, self, "&Commit", callback=self.commit)
OWGUI.checkBox(b, self, "commitOnChange", "Commit on change")
OWGUI.button(self.controlArea, self, "&Save Graph", callback=self.saveGraph, debuggingEnabled = 0)
self.selectionList=[]
self.ctrlPressed=False
self.setFocusPolicy(QWidget.StrongFocus)
self.resize(600,600)
def setMode(self):
self.componentCombo.setEnabled(self.canvas.drawMode==2)
self.canvas.redrawSom()
def setBackground(self):
self.setMode()
def setHistogram(self):
if not self.somMap: return
if self.somMap.examples.domain.variables[self.attribute].varType==orange.VarTypes.Discrete:
self.tabWidget.setTabEnabled(self.discTab,True)
self.tabWidget.setTabEnabled(self.contTab,False)
self.tabWidget.showPage(self.discTab)
else:
self.tabWidget.setTabEnabled(self.discTab,False)
self.tabWidget.setTabEnabled(self.contTab,True)
self.tabWidget.showPage(self.contTab)
self.canvas.redrawSom()
def drawPies(self):
return self.discHistMode==0 and self.somMap.examples.domain.variables[self.attribute].varType==orange.VarTypes.Discrete
def setSomMap(self, somMap=None):
self.somType="Map"
self.setSom(somMap)
def setSomClassifier(self, somMap=None):
self.somType="Classifier"
self.setSom(somMap)
def setSom(self, somMap=None):
self.closeContext()
self.somMap=somMap
if not somMap:
self.clear()
return
self.componentCombo.clear()
self.attributeCombo.clear()
#self.targetValueCombo.clear()
self.targetValue=0
self.canvas.component=0
self.attribute=0
for v in somMap.examples.domain.attributes:
self.componentCombo.insertItem(v.name)
for v in somMap.examples.domain.variables:
self.attributeCombo.insertItem(v.name)
#for v in somMap.examples.domain.attributes[self.attribute].values:
# self.targetValueCombo.insertItem(str(v))
if self.somMap.examples.domain.variables[self.attribute].varType==orange.VarTypes.Discrete:
self.tabWidget.setTabEnabled(self.discTab,True)
self.tabWidget.setTabEnabled(self.contTab,False)
self.tabWidget.showPage(self.discTab)
else:
self.tabWidget.setTabEnabled(self.discTab,False)
self.tabWidget.setTabEnabled(self.contTab,True)
self.tabWidget.showPage(self.contTab)
self.openContext("", somMap.examples)
self.canvas.setSom(somMap)
def data(self, data=None):
self.examples=data
if data and self.somMap:
for n in self.somMap.nodes:
setattr(n,"mappedExamples", orange.ExampleTable(data.domain))
for e in data:
bmu=self.somMap.getWinner(e)
bmu.mappedExamples.append(e)
if self.inputSet==1:
self.setHistogram()
def clear(self):
self.canvasView.clearSelection()
self.componentCombo.clear()
self.canvas.component=0
self.canvas.setSom(None)
self.send("Examples", None)
def updateSelection(self, nodeList):
self.selectionList=nodeList
if self.commitOnChange:
self.commit()
def commit(self):
if not self.somMap: return
ex=orange.ExampleTable(self.somMap.examples.domain)
for n in self.selectionList:
if self.inputSet==0 and n.examples:
ex.extend(n.examples)
elif self.inputSet==1 and n.mappedExamples:
ex.extend(n.mappedExamples)
if len(ex):
self.send("Examples",ex)
else:
self.send("Examples",None)
def saveGraph(self):
sizeDlg = OWChooseImageSizeDlg(self.canvas)
sizeDlg.exec_loop()
return
def keyPressEvent(self, event):
if event.key()==Qt.Key_Control:
self.ctrlPressed=True
else:
event.ignore()
def keyReleaseEvent(self, event):
if event.key()==Qt.Key_Control:
self.ctrlPressed=False
else:
event.ignore()
if __name__=="__main__":
ap=QApplication(sys.argv)
data=orange.ExampleTable("../../doc/datasets/iris.tab")
l=orngSOM.SOMLearner( topology=orangeom.SOMLearner.RectangularTopology)
l=l(data)
l.data=data
w=OWSOMVisualizer()
ap.setMainWidget(w)
w.setSomClassifier(l)
w.data(orange.ExampleTable(data[:50]))
w.show()
ap.exec_loop()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -