Changeset 4647:2b9ddf0548e7 in orange


Ignore:
Timestamp:
05/13/08 22:56:47 (6 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
0843793ee508efcc79ba9c11e241e001b3fc3e49
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/orngClustering.py

    r4640 r4647  
    1010    defaultTextColor = (100, 100, 100) 
    1111    defaultMatrixOutlineColor = (240, 240, 240) 
    12     def __init__(self, tree, data=None, width=None, height=None, treeAreaWidth=None, textAreaWidth=None, matrixAreaWidth=None, fontSize=None, painter=None, treeColors={}): 
     12    def __init__(self, tree, data=None, width=None, height=None, treeAreaWidth=None, textAreaWidth=None, matrixAreaWidth=None, fontSize=None, painter=None, clusterColors={}): 
    1313        self.tree = tree 
    1414        self.data = data 
     
    2020        self.matrixAreaWidth = matrixAreaWidth 
    2121        self.fontSize = fontSize 
    22         self.treeColors = treeColors 
     22        self.clusterColors = clusterColors 
    2323        self.lowColor = (0, 0, 0) 
    2424        self.hiColor = (255, 255, 255) 
     
    6262        return width, height, treeAreaWidth, textAreaWidth, matrixAreaWidth, fontSize, fontSize 
    6363 
    64     def SetLayout(self, width=None, height=None, treeAreaWidth=None, textAreaWidth=None, matrixAreaWidth=None): 
     64    def SetLayout(self, width=None, height=None): #, treeAreaWidth=None, textAreaWidth=None, matrixAreaWidth=None): 
     65        """Set the layout of the dendrogram.  
     66        """ 
    6567        self.height = height 
    6668        self.width = width 
    67         self.treeAreaWidth = treeAreaWidth 
    68         self.textAreaWidth = textAreaWidth 
    69         self.matrixAreaWidth = matrixAreaWidth 
     69##        self.treeAreaWidth = treeAreaWidth 
     70##        self.textAreaWidth = textAreaWidth 
     71##        self.matrixAreaWidth = matrixAreaWidth 
    7072 
    7173    def SetMatrixColorScheme(self, low, hi): 
     74        """Set the matrix color scheme. low and hi must be (r, g, b) tuples 
     75        """ 
    7276        self.lowColor = low 
    7377        self.hiColor = hi 
     78 
     79    def SetClusterColors(self, clusterColors={}): 
     80        """clusterColors must be a dictionary with cluster instances as keys and (r, g, b) tuples as items. 
     81        """ 
     82        self.clusterColors = clusterColors 
    7483         
    7584    def _getColorScheme(self): 
     
    8897        return colorScheme 
    8998 
    90     def InitPainter(self, w, h): 
     99    def _initPainter(self, w, h): 
    91100        self.image = Image.new("RGB", (w, h), color=(255, 255, 255)) 
    92101        self.painter = ImageDraw.Draw(self.image) 
     102 
     103    def _truncText(self, text, width): 
     104        while text: 
     105            if self._getTextSizeHint(text)[0]>width: 
     106                text = text[:-1] 
     107            else: 
     108                break 
     109        return text 
     110                 
    93111     
    94112    def Plot(self, file="graph.png"): 
     113        """Draws the dendrogram and saves it to file 
     114        """ 
    95115        if type(file)==str: 
    96116            file = open(file, "wb") 
     
    108128        globalTreeHeight = self.tree.height 
    109129        if not self.painter: 
    110             self.InitPainter(width, height) 
     130            self._initPainter(width, height) 
    111131        def _drawTree(tree, color=None): 
    112132            treeHeight = treeAreaStart+(1-tree.height/globalTreeHeight)*treeAreaWidth 
    113             color = self.treeColors.get(tree, color or self.defaultTreeColor) 
     133            color = self.clusterColors.get(tree, color or self.defaultTreeColor) 
    114134            if tree.branches: 
    115135                subClusterPoints = [] 
     
    139159            label = labels[i] 
    140160            row = self.data[i] 
    141             self.painter.text((textAreaStart, topMargin+i*hAdvance), label, fill=self.defaultTextColor) 
     161            self.painter.text((textAreaStart, topMargin+i*hAdvance), self._truncText(label, textAreaWidth), font=self.font, fill=self.defaultTextColor) 
    142162            _drawMatrixRow(row, topMargin+i*hAdvance) 
    143163 
     
    146166 
    147167if __name__=="__main__": 
    148     data = orange.ExampleTable("e://repo//orange//doc//datasets//brown-selected.tab") 
    149 ##    data = orange.ExampleTable("e://repo//orange//doc//datasets//iris.tab") 
     168    data = orange.ExampleTable("doc//datasets//brown-selected.tab") 
     169##    data = orange.ExampleTable("doc//datasets//iris.tab") 
     170##    data = orange.ExampleTable("doc//datasets//zoo.tab") 
     171##    data = orange.ExampleTable("doc//datasets//titanic.tab") 
    150172##    m = [[], [ 3], [ 2, 4], [17, 5, 4], [ 2, 8, 3, 8], [ 7, 5, 10, 11, 2], [ 8, 4, 1, 5, 11, 13], [ 4, 7, 12, 8, 10, 1, 5], [13, 9, 14, 15, 7, 8, 4, 6], [12, 10, 11, 15, 2, 5, 7, 3, 1]] 
    151173##    matrix = orange.SymMatrix(m) 
     
    157179            matrix[i, j] = dist(data[i], data[j]) 
    158180    root = orange.HierarchicalClustering(matrix, linkage=orange.HierarchicalClustering.Average) 
    159     d = DendrogramPlot(root, data=data, treeColors={root.left:(0,255,0), root.right:(0,0,255)} , width=500) 
     181    d = DendrogramPlot(root, data=data)#, fontSize=20) #height=1000) 
    160182    d.SetMatrixColorScheme((0, 255, 0), (255, 0, 0)) 
     183    d.SetClusterColors({root.left:(0,255,0), root.right:(0,0,255)}) 
    161184    d.Plot() 
    162185     
Note: See TracChangeset for help on using the changeset viewer.