Changeset 8667:730ebfbf93ac in orange


Ignore:
Timestamp:
08/12/11 09:18:18 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
b4ef50d2c179dd330d3a4e91ec5baa4ddf8d87b3
Message:

Added option to select/mark points by their coordinates, and use the continuous legend in Linproj and Polyviz

Files:
9 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Prototypes/OWLinProjGraphQt.py

    r8642 r8667  
    366366            # show legend for continuous class 
    367367            elif self.dataHasContinuousClass: 
    368                 xs = [1.15, 1.20, 1.20, 1.15] 
    369                 count = 200 
    370                 height = 2 / float(count) 
    371                 for i in range(count): 
    372                     y = -1.0 + i*2.0/float(count) 
    373                     col = self.contPalette[i/float(count)] 
    374                     col.setAlpha(self.alphaValue) 
    375                     PolygonCurve(QPen(col), QBrush(col), xData = xs, yData = [y,y, y+height, y+height]).attach(self) 
    376  
    377                 # add markers for min and max value of color attribute 
    378                 [minVal, maxVal] = self.attrValues[self.dataDomain.classVar.name] 
    379                 self.addMarker("%s = %%.%df" % (self.dataDomain.classVar.name, self.dataDomain.classVar.numberOfDecimals) % (minVal), xs[0] - 0.02, -1.0 + 0.04, Qt.AlignLeft) 
    380                 self.addMarker("%s = %%.%df" % (self.dataDomain.classVar.name, self.dataDomain.classVar.numberOfDecimals) % (maxVal), xs[0] - 0.02, +1.0 - 0.04, Qt.AlignLeft) 
    381  
     368                self.legend().add_color_gradient(self.dataDomain.classVar.name, [("%%.%df" % self.dataDomain.classVar.numberOfDecimals % v) for v in self.attrValues[self.dataDomain.classVar.name]]) 
    382369        self.replot() 
    383370 
  • orange/OrangeWidgets/Prototypes/OWPolyvizGraphQt.py

    r8439 r8667  
    312312            # show legend for continuous class 
    313313            elif self.dataHasContinuousClass: 
    314                 xs = [1.15, 1.20, 1.20, 1.15] 
    315                 count = 200 
    316                 height = 2 / float(count) 
    317                 for i in range(count): 
    318                     y = -1.0 + i*2.0/float(count) 
    319                     col = self.contPalette[i/float(count)] 
    320                     c = PolygonCurve(QPen(col), QBrush(col), xs, [y,y, y+height, y+height]) 
    321                     c.attach(self) 
    322  
    323                 # add markers for min and max value of color attribute 
    324                 [minVal, maxVal] = self.attrValues[self.dataDomain.classVar.name] 
    325                 self.addMarker("%s = %%.%df" % (self.dataDomain.classVar.name, self.dataDomain.classVar.numberOfDecimals) % (minVal), xs[0] - 0.02, -1.0 + 0.04, Qt.AlignLeft) 
    326                 self.addMarker("%s = %%.%df" % (self.dataDomain.classVar.name, self.dataDomain.classVar.numberOfDecimals) % (maxVal), xs[0] - 0.02, +1.0 - 0.04, Qt.AlignLeft) 
     314                self.legend().add_color_gradient(self.dataDomain.classVar.name, [("%%.%df" % self.dataDomain.classVar.numberOfDecimals % v) for v in self.attrValues[self.dataDomain.classVar.name]]) 
    327315 
    328316        self.replot() 
  • orange/OrangeWidgets/Prototypes/OWScatterPlotGraphQt.py

    r8666 r8667  
    191191 
    192192            self.set_main_curve_data(xData, yData, colorData, labelData, sizeData, shapeData) 
     193            sub_x_data, sub_y_data = self.getXYSubsetDataPositions(xAttr, yAttr) 
     194            self.mark_points_at(sub_x_data, sub_y_data) 
    193195 
    194196        # ############################################################## 
     
    364366        # ############################################################## 
    365367        # draw color scale for continuous coloring attribute 
    366         qDebug('Show continuous legend? ' + str(colorIndex) + '  ' + repr(showContinuousColorLegend)) 
    367368        if colorIndex != -1 and showContinuousColorLegend: 
    368369            self.legend().add_color_gradient(colorAttr, [("%%.%df" % self.dataDomain[colorAttr].numberOfDecimals % v) for v in self.attrValues[colorAttr]]) 
  • orange/OrangeWidgets/plot/owlegend.py

    r8666 r8667  
    9696        self.gradient_item = QGraphicsRectItem(self) 
    9797        self.gradient = QLinearGradient() 
    98         self.gradient.setStops([(v, self.palette[v]) for v in [0,1] ]) 
     98        self.gradient.setStops([(v*0.1, self.palette[v*0.1]) for v in range(11) ]) 
    9999        self.orientation = Qt.Horizontal 
    100100        self.set_orientation(Qt.Vertical) 
  • orange/OrangeWidgets/plot/owplot.py

    r8659 r8667  
    698698        if not self.main_curve: 
    699699            self.main_curve = OWMultiCurve([], []) 
     700            self.add_item(self.main_curve) 
    700701 
    701702        c = self.main_curve 
     
    707708        c.set_point_symbols(shape_data) 
    708709        c.name = 'Main Curve' 
    709         return self.add_custom_curve(c) 
     710         
     711    def mark_points_at(self, x_data, y_data): 
     712        for data_point in zip(x_data, y_data): 
     713            point = self.point_at(data_point) 
     714            if point: 
     715                point.set_marked(true) 
    710716         
    711717    def remove_curve(self, item): 
     
    13991405        if self.main_curve: 
    14001406            self.main_curve.set_alpha_value(self.alpha_value) 
    1401         for c in self.plot_items(): 
    1402             if isinstance(c, orangeplot.Curve) and not getattr(c, 'ignore_alpha', False): 
    1403                 au = c.auto_update() 
    1404                 c.set_auto_update(False) 
    1405                 c.set_point_size(self.point_width) 
    1406                 color = c.color() 
    1407                 color.setAlpha(self.alpha_value) 
    1408                 c.set_color(color) 
    1409                 c.set_auto_update(au) 
    1410                 c.update_properties() 
     1407        else: 
     1408            for c in self.plot_items(): 
     1409                if isinstance(c, orangeplot.Curve) and not getattr(c, 'ignore_alpha', False): 
     1410                    au = c.auto_update() 
     1411                    c.set_auto_update(False) 
     1412                    c.set_point_size(self.point_width) 
     1413                    color = c.color() 
     1414                    color.setAlpha(self.alpha_value) 
     1415                    c.set_color(color) 
     1416                    c.set_auto_update(au) 
     1417                    c.update_properties() 
    14111418        self.viewport().update() 
    14121419     
  • source/orangeplot/curve.cpp

    r8660 r8667  
    7676    m_pointItems << new Point(m_symbol, m_color, m_pointSize, this); 
    7777  } 
    78   register_points(); 
    7978  Q_ASSERT(m_pointItems.size() == m_data.size()); 
    8079} 
     
    128127      m_pointItems[i]->set_coordinates(m_data[i]); 
    129128    } 
     129    register_points(); 
    130130    update_items(m_pointItems, PointPosUpdater(m_graphTransform), UpdatePosition); 
    131131  }  
     
    162162  Q_ASSERT(x_data.size() == y_data.size()); 
    163163  int n = qMin(x_data.size(), y_data.size()); 
     164  qDebug() << "Curve::set_data with" << n << "points"; 
    164165  if (n != m_data.size()) 
    165166  { 
     
    380381        p->remove_all_points(this); 
    381382        p->add_points(m_pointItems, this); 
     383        qDebug() << "Registered" << m_pointItems.size() << "points"; 
    382384    } 
    383385} 
  • source/orangeplot/multicurve.cpp

    r8660 r8667  
    123123    const QTransform t = graph_transform(); 
    124124    const QList<Point*> p = points(); 
     125     
    125126    for (int i = 0; i < n; ++i) 
    126127    { 
    127         p[i]->setPos(t.map(QPointF(d[i].x, d[i].y))); 
     128        p[i]->set_coordinates(d[i]); 
    128129    } 
    129130     
     131    register_points(); 
     132     
     133    update_items(points(), PointPosUpdater(graph_transform()), UpdatePosition);     
    130134    update_items(points(), ZoomUpdater(point_transform()), UpdateZoom); 
    131135} 
  • source/orangeplot/plot.cpp

    r8660 r8667  
    329329Point* Plot::point_at(const DataPoint& pos) 
    330330{ 
    331     foreach (PlotItem* item, plot_items()) 
    332     { 
    333         if (m_point_set.contains(item) && m_point_set[item].contains(pos)) 
    334         { 
    335             qDebug() << "Found a point at" << pos; 
    336             return m_point_hash[item].values(pos).first(); 
    337         } 
    338     } 
    339     qDebug() << "No point at" << pos; 
     331    foreach (const PointHash& hash, m_point_hash) 
     332    { 
     333        if (hash.contains(pos)) 
     334        { 
     335            return hash.values(pos).first(); 
     336        } 
     337    } 
    340338    return 0; 
    341339} 
     
    456454} 
    457455 
     456void Plot::mark_points(const Data& data, Plot::SelectionBehavior behavior) 
     457{ 
     458    foreach (const PointHash& hash, m_point_hash) 
     459    { 
     460        foreach (Point* point, hash) 
     461        { 
     462            if (data.contains(point->coordinates())) 
     463            { 
     464                point->set_marked(behavior == AddSelection || (behavior == ToggleSelection && !point->is_marked())); 
     465            } 
     466            else if (behavior == ReplaceSelection) 
     467            { 
     468                point->set_marked(false); 
     469            } 
     470        } 
     471    } 
     472} 
     473 
     474void Plot::select_points(const Data& data, Plot::SelectionBehavior behavior) 
     475{ 
     476    foreach (const PointHash& hash, m_point_hash) 
     477    { 
     478        foreach (Point* point, hash) 
     479        { 
     480            if (data.contains(point->coordinates())) 
     481            { 
     482                point->set_selected(behavior == AddSelection || (behavior == ToggleSelection && !point->is_selected())); 
     483            } 
     484            else if (behavior == ReplaceSelection) 
     485            { 
     486                point->set_selected(false); 
     487            } 
     488        } 
     489    } 
     490} 
     491 
     492 
    458493 
    459494#include "plot.moc" 
  • source/orangeplot/plot.h

    r8660 r8667  
    6666    void select_points(const QRectF& rect, SelectionBehavior behavior = AddSelection); 
    6767    void select_points(const QPolygonF& area, SelectionBehavior behavior = AddSelection); 
     68    void select_points(const Data& data, SelectionBehavior behavior = AddSelection); 
     69     
    6870    void mark_points(const QRectF& rect, SelectionBehavior behavior = AddSelection); 
    6971    void mark_points(const QPolygonF& area, SelectionBehavior behavior = AddSelection); 
     72    void mark_points(const Data& data, SelectionBehavior behavior = AddSelection); 
    7073     
    7174    /** 
Note: See TracChangeset for help on using the changeset viewer.