Changeset 8239:f143455ceea2 in orange


Ignore:
Timestamp:
08/20/11 13:47:38 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
2685113dbcdeb708be50fcad588926b0df8959e9
Message:

Update plot example

Location:
orange
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/plot/owplot.py

    r8235 r8239  
    6868    "setShowMainTitle" : "set_show_main_title", 
    6969    "setMainTitle" : "set_main_title", 
    70     "invTransform" : "inv_transform" 
     70    "invTransform" : "inv_transform", 
     71    "setAxisTitle" : "set_axis_title", 
     72    "setShowAxisTitle" : "set_show_axis_title" 
    7173} 
    7274 
     
    627629        else: 
    628630            self.data_range[axis_id] = (min, max) 
    629     def setAxisTitle(self, axis_id, title): 
     631             
     632    def set_axis_title(self, axis_id, title): 
    630633        if axis_id in self.axes: 
    631634            self.axes[axis_id].set_title(title) 
    632635             
    633     def setShowAxisTitle(self, axis_id, b): 
     636    def set_show_axis_title(self, axis_id, b): 
    634637        if axis_id in self.axes: 
    635638            if b == -1: 
  • orange/doc/widgets/owplot_example.py

    r8238 r8239  
    1  
    2  
    3  
    41 
    52from OWWidget import * 
    63import OWGUI 
    74from plot.owplot import * 
     5import random 
     6import orange 
     7from Orange.preprocess.scaling import get_variable_values_sorted 
    88 
    99class BasicPlot(OWPlot): 
     
    1515        self.inputs = [("Examples", ExampleTable, self.set_data)] 
    1616         
    17         self.plot = BasicPlot(self, self.mainArea, "Example plot") 
     17        self.plot = BasicPlot(self.mainArea, "Example plot", widget = self) 
     18        self.mainArea.layout().addWidget(self.plot) 
     19        random.seed(7) 
     20        self.time_id = self.startTimer(5000) 
    1821             
    1922    def set_data(self, data):         
    20         if data is not None and (len(data) == 0 or len(data.domain) == 0): 
    21             data = None 
     23        if data is None or len(data) == 0 or len(data.domain) == 0: 
     24            return 
    2225             
    2326        self.data = data 
    24         n = len(data) # The number of attributes in data 
     27        domain = data.domain 
     28        n = len(data.domain) # The number of attributes in data 
    2529         
    26         x_index = 0 
    27         y_index = 1 if n > 1 else 0 
     30        y_i, x_i, c_i, s_i = [int(random.random() * n) for i in range(4)] 
     31        qDebug(' '.join(str(i) for i in [y_i, x_i, c_i, s_i])) 
    2832         
    29         if data.domain[x_index].varType = Orange.VarType.Discrete: 
    30             self.plot.set_axis_labels(OWPlot.xBottom, get_variable_names_sorted(self.data.domain[x_index])) 
    31         if data.domain[y_index].varType = Orange.VarType.Discrete: 
    32             self.plot.set_axis_labels(OWPlot.yLeft, get_variable_names_sorted(self.data.domain[y_index])) 
     33        self.plot.set_axis_title(xBottom, domain[x_i].name) 
     34        self.plot.set_show_axis_title(xBottom, True) 
     35        self.plot.set_axis_title(yLeft, domain[y_i].name) 
     36        self.plot.set_show_axis_title(yLeft, True) 
     37         
     38        if data.domain[x_i].varType == orange.VarTypes.Discrete: 
     39            self.plot.set_axis_labels(xBottom, get_variable_values_sorted(domain[x_i])) 
     40        else: 
     41            self.plot.set_axis_autoscale(xBottom) 
     42        if data.domain[y_i].varType == orange.VarTypes.Discrete: 
     43            self.plot.set_axis_labels(yLeft, get_variable_values_sorted(domain[y_i])) 
     44        else: 
     45            self.plot.set_axis_autoscale(yLeft) 
    3346             
    34         color_data = data[2] if n > 2 else [self.plot.color(OWPalette.Data)] 
    35         size = data[3] if n > 3 else [10] 
     47        x_data = [] 
     48        y_data = [] 
     49        c_data = [] 
     50        s_data = [] 
    3651         
    37         self.plot.set_main_curve_data() 
     52        color_cont = False 
    3853         
     54        if domain[c_i].varType == orange.VarTypes.Discrete: 
     55            palette = self.plot.discPalette 
     56        else: 
     57            palette = self.plot.contPalette 
     58            color_cont = True 
     59         
     60        legend_colors = set() 
     61        legend_sizes = set() 
     62         
     63        for e in data: 
     64            x_data.append(e[x_i]) 
     65            y_data.append(e[y_i]) 
     66            color = QColor(*palette.getRGB(e[c_i])) 
     67            c_data.append(color) 
     68            size = 5 + round(e[s_i]) 
     69            s_data.append(size) 
     70             
     71            if color_cont: 
     72                legend_colors.add(float(e[c_i])) 
     73            else:    
     74                legend_colors.add( (color, int(e[c_i])) )  
     75            legend_sizes.add( (size, float(e[s_i])) ) 
     76             
     77        self.plot.legend().clear() 
     78             
     79        if domain[s_i].varType == orange.VarTypes.Discrete: 
     80            for size, value in legend_sizes: 
     81                self.plot.legend().add_item( domain[s_i].name, "%.1f" % value, OWPoint(OWPoint.Diamond, self.plot.color(OWPalette.Data), size) ) 
     82             
     83        if color_cont: 
     84            self.plot.legend().add_color_gradient(domain[c_i].name, ("%.1f" % min(legend_colors), "%.1f" % max(legend_colors))) 
     85        else: 
     86            for color, value in legend_colors: 
     87                self.plot.legend().add_item( domain[c_i].name, "%.1f" % value, OWPoint(OWPoint.Diamond, color, 5) ) 
     88                    
     89        self.plot.set_main_curve_data(x_data, y_data, color_data=c_data, label_data = [], size_data=s_data, shape_data = [OWPoint.Diamond]) 
     90         
     91    def timerEvent(self, event): 
     92        self.set_data(self.data) 
     93     
     94     
     95#test widget appearance 
     96if __name__=="__main__": 
     97    a=QApplication(sys.argv) 
     98    ow=BasicWidget() 
     99    ow.show() 
     100    data = orange.ExampleTable(r"../../doc/datasets/iris.tab") 
     101    ow.set_data(data) 
     102    ow.handleNewSignals() 
     103    a.exec_() 
     104    #save settings 
     105    ow.saveSettings() 
     106         
  • orange/doc/widgets/plots-basic.htm

    r8238 r8239  
    1515to another is quite easy. </p> 
    1616 
    17 <p>In the other example (<a href="">plots</a>) we showed how little modification  
     17<p>In the other example (<a href="plots.htm">plots</a>) we showed how little modification  
    1818is used to replace OWGraph with OWPlot.  
    1919On the other hand, this example shows that using OWPlot from the start can be much easier.  
     
    2121and different colors, sizes and shapes.  
    2222</p> 
     23 
     24<p>The central method for plotting a series of points is 
     25<code>set_main_curve_data()</code>. It creates a curve and adds it to the plot, or 
     26just updates it if one already exists. Because it doesn't recreate the curve every time 
     27it's called, it can animate the transition from one data set to another. </p> 
     28 
     29<p>To use this method, we must first convert the data to lists, one list for every property:  
     30X coordinates, Y coordinates, point colors, sizes and shapes.  
     31Each list except the coordinates can be empty, in which case the default value is used for all points.  
     32You can convert the data directly from your inputs, or use the classes in the 
     33<code>preprocess.scaling</code> module.</p> 
     34 
     35<xmp class="code"> 
     36for e in data: 
     37    x_data.append(e[x_i]) 
     38    y_data.append(e[y_i]) 
     39    color = QColor(*palette.getRGB(e[c_i])) 
     40    c_data.append(color) 
     41    size = 5 + round(e[s_i]) 
     42    s_data.append(size) 
     43</xmp> 
     44 
     45<p>Once we have the data lists, it's time to plot them:</p> 
     46 
     47<xmp class="code"> 
     48self.plot.set_main_curve_data(x_data, y_data, color_data=c_data, size_data=s_data) 
     49</xmp> 
Note: See TracChangeset for help on using the changeset viewer.