Changeset 8293:a3713f700789 in orange


Ignore:
Timestamp:
06/01/11 18:29:00 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
6225d520f1aff4b8d0f150308c7090f5bb493439
Message:

Axis labels and ticks for continuous attributes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Graph/axis.py

    r8292 r8293  
    2828 
    2929from PyQt4.QtGui import QGraphicsItemGroup, QGraphicsLineItem, QGraphicsTextItem, QPainterPath, QGraphicsPathItem, QGraphicsScene 
    30 from PyQt4.QtCore import QLineF, qDebug 
     30from PyQt4.QtCore import QLineF, QPointF, qDebug 
    3131 
    3232from palette import * 
     
    4545        self.size = None 
    4646        self.scale = None 
     47        self.tick_length = (10, 5, 0) 
    4748        self.arrows = arrows 
    4849        self.title_above = title_above 
     
    6263        self.arrow_path = path 
    6364        self.label_items = [] 
     65        self.tick_items = [] 
    6466 
    6567    def update(self): 
     
    105107            self.scene().removeItem(i) 
    106108        del self.label_items[:] 
     109        for i in self.tick_items: 
     110            self.scene().removeItem(i) 
     111        del self.tick_items[:] 
     112        min, max, step = self.scale 
    107113        if self.labels: 
    108             min, max, step = self.scale 
    109114            for i in range(len(self.labels)): 
    110115                item = QGraphicsTextItem(self) 
     
    118123                item.setRotation(-self.line.angle()) 
    119124                self.label_items.append(item) 
     125        elif self.scale and self.tick_length: 
     126            t = min 
     127            while t <= max: 
     128                p1 = self.map_to_graph(t) 
     129                label_pos = self.map_to_graph( t - step/2 ) 
     130                (major, med, minor) = self.tick_length 
     131                v = self.line.normalVector().unitVector() 
     132                d = (v.p2() - v.p1())*major 
     133                if self.title_above: 
     134                    p2 = p1 - d 
     135                    label_pos = label_pos + d/major * 30 
     136                else: 
     137                    p2 = p1 + d 
     138                self.tick_items.append(QGraphicsLineItem(QLineF(p1, p2), self)) 
     139                text_item = QGraphicsTextItem(self) 
     140                text_item.setHtml('<center>' + str(t) + '</center>') 
     141                text_item.setTextWidth(self.line.length() * step / (max-min)) 
     142                text_item.setPos(label_pos) 
     143                text_item.setRotation(-self.line.angle()) 
     144                self.label_items.append(text_item) 
     145                t = t + step             
    120146        
    121147    @staticmethod 
     
    143169         
    144170    def set_scale(self, min, max, step_size): 
     171        if not step_size: 
     172            step_size = (max-min)/10 
    145173        self.scale = (min, max, step_size) 
    146174        self.update() 
Note: See TracChangeset for help on using the changeset viewer.