Changeset 8415:7fe71c13e814 in orange


Ignore:
Timestamp:
07/22/11 15:23:28 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
184c60c1da16c10ddf3e65d9739cbe7d8469a567
Message:

owscatterplot: jittering

Location:
orange/OrangeWidgets
Files:
2 edited

Legend:

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

    r8412 r8415  
    44from OWWidget import * 
    55from owplot3d import * 
     6 
     7import orange 
     8Discrete = orange.VarTypes.Discrete 
     9Continuous = orange.VarTypes.Continuous 
    610 
    711import OWGUI 
     
    3135        self.z_attr = 0 
    3236 
     37        self.x_attr_discrete = False 
     38        self.y_attr_discrete = False 
     39        self.z_attr_discrete = False 
     40 
    3341        self.color_attr = None 
    3442        self.size_attr = None 
     
    107115        self.jitter_size_combo = OWGUI.comboBox(box, self, 'jitter_size', label='Jittering size (% of size)'+'  ', 
    108116            orientation='horizontal', 
    109             callback=self.on_checkbox_update, 
     117            callback=self.update_plot, 
    110118            items=self.jitter_sizes, 
    111119            sendSelectedValue=1, 
    112120            valueType=float) 
    113121        OWGUI.checkBox(box, self, 'jitter_continuous', 'Jitter continuous attributes', 
    114             callback=self.on_checkbox_update, 
     122            callback=self.update_plot, 
    115123            tooltip='Does jittering apply also on continuous attributes?') 
    116124 
     
    223231        if self.data is not None: 
    224232            self.all_attrs = data.domain.variables + data.domain.getmetas().values() 
    225             self.axis_candidate_attrs = [attr for attr in self.all_attrs 
    226                 if attr.varType in [orange.VarTypes.Continuous, orange.VarTypes.Discrete]] 
     233            self.candidate_attrs = [attr for attr in self.all_attrs if attr.varType in [Discrete, Continuous]] 
    227234 
    228235            self.attr_name_index = {} 
     
    239246            self.label_attr_cb.addItem('(No labels)') 
    240247            icons = OWGUI.getAttributeIcons()  
    241             for (i, attr) in enumerate(self.axis_candidate_attrs): 
     248            for (i, attr) in enumerate(self.candidate_attrs): 
    242249                self.x_attr_cb.addItem(icons[attr.varType], attr.name) 
    243250                self.y_attr_cb.addItem(icons[attr.varType], attr.name) 
     
    256263 
    257264            self.x_attr, self.y_attr, self.z_attr = numpy.min([[0, 1, 2], 
    258                                                                [len(self.axis_candidate_attrs) - 1]*3 
     265                                                               [len(self.candidate_attrs) - 1]*3 
    259266                                                              ], axis=0) 
    260             self.color_attr = max(len(self.axis_candidate_attrs) - 1, 0) 
     267            self.color_attr = max(len(self.candidate_attrs) - 1, 0) 
    261268            self.shown_attr_indices = [self.x_attr, self.y_attr, self.z_attr, self.color_attr] 
    262269            self.openContext('', data) 
     
    286293                            [('Symbol size', self.plot.symbol_scale), 
    287294                             ('Transparency', self.plot.transparency), 
    288                              #("Jittering", self.graph.jitterSize), 
    289                              #("Jitter continuous attributes", OWGUI.YesNo[self.graph.jitterContinuous])]) 
     295                             ("Jittering", self.jitter_size), 
     296                             ("Jitter continuous attributes", OWGUI.YesNo[self.jitter_continuous]) 
    290297                             ]) 
    291298        self.reportSection('Plot') 
     
    314321            return 
    315322 
    316         x_ind, y_ind, z_ind = self.get_axes_indices() 
    317         X, Y, Z, mask = self.get_axis_data(x_ind, y_ind, z_ind) 
     323        self.x_attr_discrete = self.y_attr_discrete = self.z_attr_discrete = False 
     324 
     325        if self.candidate_attrs[self.x_attr].varType == Discrete: 
     326            self.x_attr_discrete = True 
     327        if self.candidate_attrs[self.y_attr].varType == Discrete: 
     328            self.y_attr_discrete = True 
     329        if self.candidate_attrs[self.z_attr].varType == Discrete: 
     330            self.z_attr_discrete = True 
     331 
     332        X, Y, Z, mask = self.get_axis_data(self.x_attr, self.y_attr, self.z_attr) 
    318333 
    319334        color_legend_items = [] 
    320335        if self.color_attr > 0: 
    321             color_attr = self.axis_candidate_attrs[self.color_attr - 1] 
     336            color_attr = self.candidate_attrs[self.color_attr - 1] 
    322337            C = self.data_array[:, self.color_attr - 1] 
    323             if color_attr.varType == orange.VarTypes.Discrete: 
     338            if color_attr.varType == Discrete: 
    324339                palette = OWColorPalette.ColorPaletteHSV(len(color_attr.values)) 
    325340                colors = [palette[int(value)] for value in C.ravel()] 
     
    338353 
    339354        if self.size_attr > 0: 
    340             size_attr = self.axis_candidate_attrs[self.size_attr - 1] 
     355            size_attr = self.candidate_attrs[self.size_attr - 1] 
    341356            S = self.data_array[:, self.size_attr - 1] 
    342             if size_attr.varType == orange.VarTypes.Discrete: 
     357            if size_attr.varType == Discrete: 
    343358                sizes = [(v + 1) * len(size_attr.values) / (11 - self.symbol_scale) for v in S] 
    344359            else: 
     
    351366        if self.shape_attr > 0: 
    352367            i, shape_attr = self.discrete_attrs[self.shape_attr] 
    353             if shape_attr.varType == orange.VarTypes.Discrete: 
     368            if shape_attr.varType == Discrete: 
    354369                # Map discrete attribute to [0...num shapes-1] 
    355370                shapes = self.data_array[:, i] 
     
    364379        labels = None 
    365380        if self.label_attr > 0: 
    366             label_attr = self.axis_candidate_attrs[self.label_attr - 1] 
     381            label_attr = self.candidate_attrs[self.label_attr - 1] 
    367382            labels = self.data_array[:, self.label_attr - 1] 
    368383 
     
    385400 
    386401        self.plot.scatter(X, Y, Z, colors, sizes, shapes, labels) 
    387         self.plot.set_x_axis_title(self.axis_candidate_attrs[self.x_attr].name) 
    388         self.plot.set_y_axis_title(self.axis_candidate_attrs[self.y_attr].name) 
    389         self.plot.set_z_axis_title(self.axis_candidate_attrs[self.z_attr].name) 
     402        self.plot.set_x_axis_title(self.candidate_attrs[self.x_attr].name) 
     403        self.plot.set_y_axis_title(self.candidate_attrs[self.y_attr].name) 
     404        self.plot.set_z_axis_title(self.candidate_attrs[self.z_attr].name) 
    390405 
    391406        def create_discrete_map(attr_index): 
    392             keys = range(len(self.axis_candidate_attrs[attr_index].values)) 
    393             values = self.axis_candidate_attrs[attr_index].values 
    394             map = {} 
    395             for key, value in zip(keys, values): 
    396                 map[key] = value 
    397             return map 
    398  
    399         if self.axis_candidate_attrs[self.x_attr].varType == orange.VarTypes.Discrete: 
     407            values = self.candidate_attrs[attr_index].values 
     408            return {key: value for key, value in enumerate(values)} 
     409 
     410        if self.candidate_attrs[self.x_attr].varType == Discrete: 
    400411            self.plot.set_x_axis_map(create_discrete_map(self.x_attr)) 
    401         if self.axis_candidate_attrs[self.y_attr].varType == orange.VarTypes.Discrete: 
     412        if self.candidate_attrs[self.y_attr].varType == Discrete: 
    402413            self.plot.set_y_axis_map(create_discrete_map(self.y_attr)) 
    403         if self.axis_candidate_attrs[self.z_attr].varType == orange.VarTypes.Discrete: 
     414        if self.candidate_attrs[self.z_attr].varType == Discrete: 
    404415            self.plot.set_z_axis_map(create_discrete_map(self.z_attr)) 
    405416 
    406     def get_axis_data(self, x_ind, y_ind, z_ind): 
     417    def get_axis_data(self, x_index, y_index, z_index): 
    407418        array = self.data_array 
    408         X, Y, Z = array[:, x_ind], array[:, y_ind], array[:, z_ind] 
     419        X, Y, Z = array[:, x_index], array[:, y_index], array[:, z_index] 
     420        X, Y, Z = map(numpy.copy, [X, Y, Z]) 
     421 
     422        if self.jitter_size > 0: 
     423            x_range = numpy.max(X)-numpy.min(X) 
     424            y_range = numpy.max(Y)-numpy.min(Y) 
     425            z_range = numpy.max(Z)-numpy.min(Z) 
     426            if self.x_attr_discrete or self.jitter_continuous: 
     427                X += (numpy.random.random(len(X))-0.5) * (self.jitter_size * x_range / 100.) 
     428            if self.y_attr_discrete or self.jitter_continuous: 
     429                Y += (numpy.random.random(len(Y))-0.5) * (self.jitter_size * y_range / 100.) 
     430            if self.z_attr_discrete or self.jitter_continuous: 
     431                Z += (numpy.random.random(len(Z))-0.5) * (self.jitter_size * z_range / 100.) 
    409432        return X, Y, Z, None 
    410  
    411     def get_axes_indices(self): 
    412         return self.x_attr, self.y_attr, self.z_attr 
    413433 
    414434if __name__ == "__main__": 
  • orange/OrangeWidgets/owplot3d.py

    r8412 r8415  
    424424                // We've packed example index into .w component of this vertex, 
    425425                // to output it to the screen, it has to be broken down into RGBA. 
    426                 int index = int(position.w); 
     426                uint index = uint(position.w); 
    427427                var_color = vec4(((index & 0xFF)) / 255., 
    428428                                 ((index & 0xFF00) >> 8) / 255., 
     
    943943        self.z_axis_map = map 
    944944        self.updateGL() 
     945 
     946    def set_new_zoom(self, x_min, x_max, y_min, y_max, z_min, z_max): 
     947        pass 
    945948 
    946949    def save_to_file(self): 
Note: See TracChangeset for help on using the changeset viewer.