def _calculate(self, data): x = pop(data, 'x', None) y = pop(data, 'y', None) # intercept and slope may be one of: # - aesthetics to geom_abline or # - parameter settings to stat_abline slope = pop(data, 'slope', self.params['slope']) intercept = pop(data, 'intercept', self.params['intercept']) if hasattr(slope, '__call__'): if x is None or y is None: raise GgplotError( 'To compute the slope, x & y aesthetics are needed') try: slope = slope(x, y) except TypeError as err: raise GgplotError(*err.args) if hasattr(intercept, '__call__'): if x is None or y is None: raise GgplotError( 'To compute the intercept, x & y aesthetics are needed') try: intercept = intercept(x, y) except TypeError as err: raise GgplotError(*err.args) try: n = len(slope) except TypeError: n = 1 try: _n = len(intercept) except TypeError: _n = 1 if n != _n: raise GgplotError('Specified {} slopes but {} intercepts'.format( n, _n)) slope = make_iterable(slope) intercept = make_iterable(intercept) new_data = pd.DataFrame({'slope': slope, 'intercept': intercept}) # Copy the other aesthetics into the new dataframe n = len(slope) for ae in data: new_data[ae] = make_iterable_ntimes(data[ae].iloc[0], n) return new_data
def _calculate(self, data): x = pop(data, 'x', None) y = pop(data, 'y', None) # intercept and slope may be one of: # - aesthetics to geom_abline or # - parameter settings to stat_abline slope = pop(data, 'slope', self.params['slope']) intercept = pop(data, 'intercept', self.params['intercept']) if hasattr(slope, '__call__'): if x is None or y is None: raise GgplotError( 'To compute the slope, x & y aesthetics are needed') try: slope = slope(x, y) except TypeError as err: raise GgplotError(*err.args) if hasattr(intercept, '__call__'): if x is None or y is None: raise GgplotError( 'To compute the intercept, x & y aesthetics are needed') try: intercept = intercept(x, y) except TypeError as err: raise GgplotError(*err.args) try: n = len(slope) except TypeError: n = 1 try: _n = len(intercept) except TypeError: _n = 1 if n != _n: raise GgplotError( 'Specified {} slopes but {} intercepts'.format(n, _n)) slope = make_iterable(slope) intercept = make_iterable(intercept) new_data = pd.DataFrame({'slope': slope, 'intercept': intercept}) # Copy the other aesthetics into the new dataframe n = len(slope) for ae in data: new_data[ae] = make_iterable_ntimes(data[ae].iloc[0], n) return new_data
def _calculate(self, data): x = pop(data, 'x', None) # xintercept may be one of: # - aesthetic to geom_vline or # - parameter setting to stat_vline xintercept = pop(data, 'xintercept', self.params['xintercept']) if hasattr(xintercept, '__call__'): if x is None: raise GgplotError( 'To compute the intercept, x aesthetic is needed') try: xintercept = xintercept(x) except TypeError as err: raise GgplotError(*err.args) xintercept = make_iterable(xintercept) new_data = pd.DataFrame({'xintercept': xintercept}) # Copy the other aesthetics into the new dataframe n = len(xintercept) for ae in data: new_data[ae] = make_iterable_ntimes(data[ae].iloc[0], n) return new_data