Beispiel #1
0
    def render(self, dataframe, path ):
        
        if len(dataframe.columns) < 2:
            raise ValueError( "requiring two coordinates, only got %s" % str(dataframe.columns))

        plts, legend = [], []
        blocks = ResultBlocks()

        for xcolumn, ycolumn in itertools.combinations( dataframe.columns, 2 ):

            # remove missing data points
            xvalues, yvalues = Stats.filterMissing( (dataframe[xcolumn], dataframe[ycolumn]) )

            # remove columns with all NaN
            if len(xvalues) == 0 or len(yvalues) == 0:
                continue

            # apply log transformation on data not on plot
            if self.logscale:
                if "x" in self.logscale:
                    xvalues = R.log10(xvalues)
                if "y" in self.logscale:
                    yvalues = R.log10(yvalues)

            self.startPlot()
            # wrap, as pandas series can not
            # passed through rpy2.
            R.smoothScatter( numpy.array( xvalues, dtype=numpy.float), 
                             numpy.array( yvalues, dtype=numpy.float), 
                             xlab=xcolumn, 
                             ylab=ycolumn,
                             nbin = self.nbins )
            blocks.extend( self.endPlot( dataframe, path ) )

        return blocks
    def __call__(self, data, path ):
        '''iterate over leaves/branches in data structure.

        This method will call the :meth:`render` method for 
        each leaf/branch at level :attr:`nlevels`.
        '''
        if self.nlevels == None: raise NotImplementedError("incomplete implementation of %s" % str(self))

        result = ResultBlocks( title = path2str(path) )

        labels = DataTree.getPaths( data )
        if len(labels) < self.nlevels:
            self.warn( "at %s: expected at least %i levels - got %i: %s" %\
                           (str(path), self.nlevels, len(labels), str(labels)) )
            result.append( EmptyResultBlock( title = path2str(path) ) )
            return result

        paths = list(itertools.product( *labels[:-self.nlevels] ))

        for p in paths:
            work = DataTree.getLeaf( data, p )
            if not work: continue
            try:
                result.extend( self.render( work, path + p ) )
            except:
                self.warn("exeception raised in rendering for path: %s" % str(path+p))
                raise 
            
        return result