Changeset 1844:9d532651ea3b in orange-bioinformatics for _bioinformatics/widgets/OWHeatMap.py


Ignore:
Timestamp:
08/14/13 12:12:28 (8 months ago)
Author:
markotoplak
Branch:
default
Message:

OWHeatMap: swapped X,Y labels. Fixed progress bar.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _bioinformatics/widgets/OWHeatMap.py

    r1843 r1844  
    2323from Orange.OrangeWidgets.OWWidget import * 
    2424 
     25import functools 
     26 
    2527DEBUG = False 
    2628 
     
    7678    return groups.items() 
    7779 
    78 def hierarchical_cluster_ordering(data, dimension, group_domains=None, opt_order=False, progress_callback=None): 
     80class PP_callback(object): 
     81 
     82    def __init__(self, parts=None, progress_callback=None): 
     83        self.progress_callback = progress_callback 
     84        self.parts = parts 
     85        self.part = 0 
     86 
     87    def __call__(self, value): 
     88        return self.progress_callback(value / self.parts + 100.0 * self.part / self.parts) 
     89 
     90    def newpart(self): 
     91        self.part += 1 
     92        self.__call__(0) 
     93  
     94 
     95def hierarchical_cluster_ordering_examples(data, group_domains=None, opt_order=False, pp_callback=None): 
     96        
    7997    classVar = data.domain.classVar 
    8098    if classVar and isinstance(classVar, orange.EnumVariable): 
     
    82100    else: 
    83101        class_data = [[1] * len(data)] 
    84          
    85     parts = len(class_data) + 1  
    86      
    87     def pp_callback(part): 
    88         def callback(value): 
    89             return progress_callback(value / parts + 100.0 * part / parts) 
    90         if progress_callback: 
    91             callback(100.0 * part / parts) 
    92             return callback 
    93         else: 
    94             return progress_callback 
    95          
     102  
     103    def indices_map(indices): 
     104        map = zip(range(len(indices)), indices) 
     105        map = [i for i, test in map if test] 
     106        return dict(enumerate(map)) 
     107     
     108    data_ordering = [] 
     109    data_clusters = [] 
     110    for i, indices in enumerate(class_data): 
     111        sub_data = data.select(indices) 
     112        pp_callback.newpart() 
     113        cluster = orngClustering.hierarchicalClustering(sub_data, order=opt_order, progressCallback=pp_callback) 
     114        ind_map = indices_map(indices) 
     115        data_ordering.append([ind_map[m] for m in cluster.mapping]) 
     116        data_clusters.append(cluster) 
     117         
     118    return data_ordering, data_clusters  
     119 
     120def hierarchical_cluster_ordering_attributes(data, group_domains=None, opt_order=False, pp_callback=None): 
     121 
     122    pp_callback.newpart() 
     123 
    96124    if group_domains is not None and len(group_domains) > 1: 
    97125        stacked = vstack_by_subdomain(data, group_domains) 
    98126    else: 
    99127        stacked = data     
    100      
    101     if dimension == 'X': 
    102  
    103         def indices_map(indices): 
    104             map = zip(range(len(indices)), indices) 
    105             map = [i for i, test in map if test] 
    106             return dict(enumerate(map)) 
    107          
    108         data_ordering = [] 
    109         data_clusters = [] 
    110         for i, indices in enumerate(class_data): 
    111             sub_data = data.select(indices) 
    112             cluster = orngClustering.hierarchicalClustering(sub_data, order=opt_order, progressCallback=pp_callback(i + 1)) 
    113             ind_map = indices_map(indices) 
    114             data_ordering.append([ind_map[m] for m in cluster.mapping]) 
    115             data_clusters.append(cluster) 
    116              
    117         return data_ordering, data_clusters  
    118  
    119     if dimension == 'Y': 
    120         attr_cluster = orngClustering.hierarchicalClustering_attributes(stacked, order=opt_order, progressCallback=pp_callback(3)) 
    121         attr_ordering = list(attr_cluster.mapping) 
    122             
    123         return attr_ordering, attr_cluster 
     128 
     129    attr_cluster = orngClustering.hierarchicalClustering_attributes(stacked, order=opt_order, progressCallback=pp_callback) 
     130    attr_ordering = list(attr_cluster.mapping) 
     131        
     132    return attr_ordering, attr_cluster 
    124133 
    125134############################################################################## 
     
    275284        boxy = OWGUI.widgetBox(settingsTab, "Sorting", orientation = "vertical", addSpace=True) 
    276285 
     286        # For attributes 
     287        OWGUI.comboBox(boxy, self, "SortAttributes",  
     288                        items=["No sorting", "Clustering", 
     289                               "Clustering with leaf ordering"], label='X axis', 
     290                               callback=self.update_sorting_attributes) 
     291  
    277292        # For examples 
    278293        OWGUI.comboBox(boxy, self, "SortExamples", 
    279294                        items=["No sorting", "Sort examples", "Clustering", 
    280                                "Clustering with leaf ordering"], label='X axis', 
     295                               "Clustering with leaf ordering"], label='Y axis', 
    281296                               callback=self.update_sorting_examples) 
    282          
    283         # For attributes 
    284         OWGUI.comboBox(boxy, self, "SortAttributes",  
    285                         items=["No sorting", "Clustering", 
    286                                "Clustering with leaf ordering"], label='Y axis', 
    287                                callback=self.update_sorting_attributes) 
    288          
     297        
    289298        OWGUI.rubber(settingsTab) 
    290299         
     
    629638        sorted_data = data 
    630639 
    631         # Only rows 
     640        self.progressBarInit() 
     641 
     642        progress_parts = 0 
    632643        if self.SortExamples > 1: 
    633             self.progressBarInit() 
     644            classVar = data.domain.class_var 
     645            if classVar and isinstance(classVar, orange.EnumVariable): 
     646                progress_parts += len(classVar.values) 
     647            else: 
     648                progress_parts += 1 
     649        if self.SortAttributes > 0: 
     650            progress_parts += 1 
     651 
     652        progress_bar = PP_callback(progress_callback=self.progressBarSet, parts=progress_parts) 
     653 
     654        # rows 
     655        if self.SortExamples > 1: 
    634656 
    635657            args_key = tuple(tuple(d) for d in group_domains), self.SortExamples == 3, "data" 
     
    639661                # Rows separately 
    640662                data_ordering, data_clusters = \ 
    641                         hierarchical_cluster_ordering(data, "X", group_domains, 
     663                        hierarchical_cluster_ordering_examples(data, group_domains, 
    642664                                      opt_order=self.SortExamples == 3, 
    643                                       progress_callback=self.progressBarSet) 
     665                                      pp_callback=progress_bar) 
    644666 
    645667                # Cache the clusters 
     
    649671             
    650672            sorted_data = [data[i] for i in itertools.chain(*data_ordering)] 
    651             self.progressBarFinished() 
    652          
    653         # Only columns 
     673         
     674        # columns 
    654675        if self.SortAttributes > 0: 
    655             self.progressBarInit() 
    656676 
    657677            args_key = tuple(tuple(d) for d in group_domains), self.SortAttributes == 2, "attributes" 
     
    661681                # Columns separately 
    662682                attr_ordering, attr_cluster = \ 
    663                         hierarchical_cluster_ordering(data, "Y", group_domains, 
     683                        hierarchical_cluster_ordering_attributes(data, group_domains, 
    664684                                      opt_order=self.SortAttributes == 2, 
    665                                       progress_callback=self.progressBarSet) 
     685                                      pp_callback=progress_bar) 
    666686 
    667687                # Cache the clusters 
     
    669689            else: 
    670690                 attr_ordering, attr_cluster = cluster_ordering 
    671              
    672             self.progressBarFinished() 
     691  
     692        self.progressBarFinished() 
    673693 
    674694        self.heatmapconstructor = [] 
     
    19471967    ow = OWHeatMap() 
    19481968     
    1949 #    fn = "/home/marko/pipa4.tab" 
    1950 #    fn = "../../../doc/datasets/brown-selected.tab" 
    1951     fn = os.path.expanduser("~/Documents/abc-subset") 
    1952     ow.set_dataset(orange.ExampleTable(fn), 0) 
     1969    ow.set_dataset(orange.ExampleTable("brown-selected"), 0) 
    19531970    ow.handleNewSignals() 
    19541971    ow.show() 
Note: See TracChangeset for help on using the changeset viewer.