Changeset 4648:fdd6d62f50a6 in orange


Ignore:
Timestamp:
05/14/08 11:49:08 (6 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
1cca0d4418a649cdc12b67ce3a74ebf0b850d326
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/orngClustering.py

    r4647 r4648  
    33 
    44import Image, ImageDraw, ImageFont 
    5  
    65 
    76class DendrogramPlot(object): 
     
    109    defaultTextColor = (100, 100, 100) 
    1110    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, clusterColors={}): 
     11    def __init__(self, tree, data=None, labels=None, width=None, height=None, treeAreaWidth=None, textAreaWidth=None, matrixAreaWidth=None, fontSize=None, painter=None, clusterColors={}): 
    1312        self.tree = tree 
    1413        self.data = data 
     14        self.labels = labels 
    1515        self.width = width 
    1616        self.height = height 
     
    2323        self.lowColor = (0, 0, 0) 
    2424        self.hiColor = (255, 255, 255) 
     25        if not self.labels: 
     26            self.labels = [str(m) for m in tree] 
     27 
    2528 
    2629    def _getTextSizeHint(self, text): 
     
    3134 
    3235    def _getMatrixRowSizeHint(self, height, max=None): 
     36        if not self.data: 
     37            return (0, 0) 
    3338        if max==None: 
    3439            return (len(self.data.domain.attributes)*height, height) 
     
    119124        leftMargin = 10 
    120125        rightMargin = 10 
    121         labels = [str(ex.getclass()) for ex in data] # TODO: get arbitrary labels 
    122         colorSheme = self._getColorScheme() 
    123         width, height, treeAreaWidth, textAreaWidth, matrixAreaWidth, hAdvance, fontSize = self._getLayout(labels) 
     126        width, height, treeAreaWidth, textAreaWidth, matrixAreaWidth, hAdvance, fontSize = self._getLayout(self.labels) 
    124127        treeAreaStart = leftMargin 
    125128        textAreaStart = treeAreaStart+treeAreaWidth+leftMargin 
     
    144147                return (treeAreaStart+treeAreaWidth, self.globalHeight-hAdvance/2) 
    145148        _drawTree(self.tree) 
    146         cellWidth = float(matrixAreaWidth)/len(self.data.domain.attributes) 
    147         def _drawMatrixRow(ex, yPos): 
    148             for i, attr in enumerate(ex.domain.attributes): 
    149                 col = colorSheme(ex[attr]) 
    150                 if col: 
    151                     if cellWidth>4: 
    152                         self.painter.rectangle([(int(matrixAreaStart+i*cellWidth), yPos), (int(matrixAreaStart+(i+1)*cellWidth), yPos+hAdvance)], fill=colorSheme(ex[attr]), outline=self.defaultMatrixOutlineColor) 
     149        if self.data: 
     150            colorSheme = self._getColorScheme() 
     151            cellWidth = float(matrixAreaWidth)/len(self.data.domain.attributes) 
     152            def _drawMatrixRow(ex, yPos): 
     153                for i, attr in enumerate(ex.domain.attributes): 
     154                    col = colorSheme(ex[attr]) 
     155                    if col: 
     156                        if cellWidth>4: 
     157                            self.painter.rectangle([(int(matrixAreaStart+i*cellWidth), yPos), (int(matrixAreaStart+(i+1)*cellWidth), yPos+hAdvance)], fill=colorSheme(ex[attr]), outline=self.defaultMatrixOutlineColor) 
     158                        else: 
     159                            self.painter.rectangle([(int(matrixAreaStart+i*cellWidth), yPos), (int(matrixAreaStart+(i+1)*cellWidth), yPos+hAdvance)], fill=colorSheme(ex[attr])) 
    153160                    else: 
    154                         self.painter.rectangle([(int(matrixAreaStart+i*cellWidth), yPos), (int(matrixAreaStart+(i+1)*cellWidth), yPos+hAdvance)], fill=colorSheme(ex[attr])) 
    155                 else: 
    156                     pass #TODO indicate a missing value 
     161                        pass #TODO indicate a missing value 
    157162##        for i, (label, row) in enumerate(zip(labels, matrix)): 
    158163        for i in self.tree: 
    159             label = labels[i] 
    160             row = self.data[i] 
     164            label = self.labels[i] 
    161165            self.painter.text((textAreaStart, topMargin+i*hAdvance), self._truncText(label, textAreaWidth), font=self.font, fill=self.defaultTextColor) 
    162             _drawMatrixRow(row, topMargin+i*hAdvance) 
     166            if self.data: 
     167                row = self.data[i] 
     168                _drawMatrixRow(row, topMargin+i*hAdvance) 
    163169 
    164170        self.image.save(file, "PNG") 
     
    179185            matrix[i, j] = dist(data[i], data[j]) 
    180186    root = orange.HierarchicalClustering(matrix, linkage=orange.HierarchicalClustering.Average) 
    181     d = DendrogramPlot(root, data=data)#, fontSize=20) #height=1000) 
     187    d = DendrogramPlot(root, data=data, labels=[str(ex.getclass()) for ex in data], width=500, height=2000) 
    182188    d.SetMatrixColorScheme((0, 255, 0), (255, 0, 0)) 
    183189    d.SetClusterColors({root.left:(0,255,0), root.right:(0,0,255)}) 
Note: See TracChangeset for help on using the changeset viewer.