source: orange/docs/extend-widgets/rst/owplot_example.py @ 11049:f4dd8dbc57bb

Revision 11049:f4dd8dbc57bb, 3.8 KB checked in by Miha Stajdohar <miha.stajdohar@…>, 16 months ago (diff)

From HTML to Sphinx.

Line 
1
2from OWWidget import *
3import OWGUI
4from plot.owplot import *
5import random
6import orange
7from Orange.data.preprocess.scaling import get_variable_values_sorted
8
9class BasicPlot(OWPlot):
10    pass
11
12class BasicWidget(OWWidget):
13    def __init__(self, parent=None, signalManager=None):
14        OWWidget.__init__(self, parent, signalManager, 'Simple plot')
15        self.inputs = [("Examples", ExampleTable, self.set_data)]
16       
17        self.plot = BasicPlot(self.mainArea, "Example plot", widget = self)
18        self.mainArea.layout().addWidget(self.plot)
19        random.seed()
20        self.time_id = self.startTimer(5000)
21           
22    def set_data(self, data):       
23        if data is None or len(data) == 0 or len(data.domain) == 0:
24            return
25           
26        self.data = data
27        domain = data.domain
28       
29        y_i, x_i, c_i, s_i = [int(random.random() * len(domain)) for i in range(4)]
30       
31        self.plot.set_axis_title(xBottom, domain[x_i].name)
32        self.plot.set_show_axis_title(xBottom, True)
33        self.plot.set_axis_title(yLeft, domain[y_i].name)
34        self.plot.set_show_axis_title(yLeft, True)
35       
36        if data.domain[x_i].varType == orange.VarTypes.Discrete:
37            self.plot.set_axis_labels(xBottom, get_variable_values_sorted(domain[x_i]))
38        else:
39            self.plot.set_axis_autoscale(xBottom)
40
41        if data.domain[y_i].varType == orange.VarTypes.Discrete:
42            self.plot.set_axis_labels(yLeft, get_variable_values_sorted(domain[y_i]))
43        else:
44            self.plot.set_axis_autoscale(yLeft)
45           
46        x_data = []
47        y_data = []
48        c_data = []
49        s_data = []
50       
51        color_cont = (domain[c_i].varType == orange.VarTypes.Continuous)
52       
53        legend_sizes = set()
54       
55        for e in data:
56            x_data.append(e[x_i])
57            y_data.append(e[y_i]) 
58            c_data.append(e[c_i])
59            size = 5 + round(e[s_i])
60            s_data.append(size)
61           
62            legend_sizes.add( (size, float(e[s_i])) )
63           
64        if color_cont:
65            m = min(c_data)
66            M = max(c_data)
67            legend_colors = set(float(c) for c in c_data)
68            c_data = [self.plot.continuous_palette[(v-m)/(M-m)] for v in c_data]
69        else:
70            _colors = [self.plot.discrete_palette.getRGB(i) for i in c_data]
71            _values = set([float(c) for c in c_data])
72            legend_colors = zip([QColor(*c) for c in set(_colors)], _values)
73            c_data = [QColor(*c) for c in _colors]
74                       
75        self.plot.legend().clear()
76           
77        if domain[s_i].varType == orange.VarTypes.Discrete:
78            for size, value in legend_sizes:
79                self.plot.legend().add_item( domain[s_i].name, domain[s_i].values[int(value)], OWPoint(OWPoint.Diamond, self.plot.color(OWPalette.Data), size) )
80           
81        if color_cont:
82            self.plot.legend().add_color_gradient(domain[c_i].name, ("%.1f" % min(legend_colors), "%.1f" % max(legend_colors)))
83        else:
84            for color, value in legend_colors:
85                self.plot.legend().add_item( domain[c_i].name, domain[c_i].values[int(value)], OWPoint(OWPoint.Diamond, color, 5) )
86                   
87        self.plot.set_main_curve_data(x_data, y_data, color_data=c_data, label_data = [], size_data=s_data, shape_data = [OWPoint.Diamond])
88        self.plot.replot()
89       
90    def timerEvent(self, event):
91        self.set_data(self.data)
92       
93    def sizeHint(self):
94        return QSize(600, 400)
95   
96   
97#test widget appearance
98if __name__=="__main__":
99    a=QApplication(sys.argv)
100    ow=BasicWidget()
101    ow.show()
102    data = orange.ExampleTable(r"../../doc/datasets/iris.tab")
103    ow.set_data(data)
104    ow.handleNewSignals()
105    a.exec_()
106    #save settings
107    ow.saveSettings()
108       
Note: See TracBrowser for help on using the repository browser.