biokit 0.0.3 documentation

Source code for biokit.viz.extra

from pylab import scatter, hist, axes, clf
import pylab


__all__ = ["scatter_hist"]


[docs]def scatter_hist(x, y=None, kargs_scatter={'s':20, 'c':'b'}, kargs_grids={}, kargs_histx={}, kargs_histy={}, hist_position='right', width=.5, height=.5, offset_x=.10, offset_y=.10, gap=0.06, grid=True, **kargs): """data could be numpy array or list of lists of dataframe if x and y provided, assume a 2D data set with X and Y ->> scatter if X only -> imshow from array or pandas other kargs are: hold histx_position can be 'top'/'bottom' histy_position can be 'left'/'right' .. plot:: :include-source: :width: 50% from biokit.viz import scatter_hist import pylab import pandas as pd X = pylab.randn(1000) Y = pylab.randn(1000) df = pd.DataFrame({'X':X, 'Y':Y}) scatter_hist(df) .. seealso:: `notebook <http://nbviewer.ipython.org/github/biokit/biokit/blob/master/notebooks/viz/biokit.viz examples.ipynb>`_ """ # if 2D --> scatter -> # if pandas matrix -> imshow + mean or sum if y is None: try: # is it a pandas df ? y = x.ix[:,1].values # first let us fill y and try: size = x['size'] kargs_scatter['s'] = size except: pass try: color = x['color'] kargs_scatter['c'] = color except: pass x = x.ix[:,0].values # second overwrite x except Exception as err: raise(err) if kargs.get("hold", False) is False: pylab.clf() W = width H = height if hist_position == 'right': X0 = offset_x Y0 = offset_y Xoff = X0 + W + gap Yoff = Y0 + H + gap Wh = 1 - offset_x*2 - W - gap Hh = 1 - offset_y*2 - H - gap elif hist_position == 'left': Wh = 1 - offset_x*2 - W - gap Hh = 1 - offset_y*2 - H - gap X0 = offset_x + Wh +gap Y0 = offset_y Xoff = offset_x Yoff = Y0 + H + gap axisbg = kargs.get('axisbg', 'white') ax_scatter = axes((X0, Y0, W, H), axisbg=axisbg, xscale='linear', yscale='linear')#, xticks='auto', yticks='auto') ax_hist_x = axes((X0, Yoff, W, Hh), axisbg=axisbg, xscale='linear', yscale='linear')#, xticks='auto', yticks='auto') ax_hist_y = axes((Xoff, Y0, Wh, H), axisbg=axisbg, xscale='linear', yscale='linear')#, xticks='auto', yticks='auto') # move ticks on axis if needed ax_hist_x.xaxis.set_ticks_position('top') if hist_position == 'left': ax_scatter.yaxis.set_ticks_position('right') ax_hist_x.yaxis.set_ticks_position('right') elif hist_position == 'right': ax_hist_y.yaxis.set_ticks_position('right') ax_scatter.scatter(x,y, **kargs_scatter) ax_hist_x.hist(x, **kargs_histx) # fixme: user may not want that ? kargs_histy['orientation'] = 'horizontal' ax_hist_y.hist(y, **kargs_histy) # I tried c.set_xticks but rotation could not be found pylab.xticks(ax_hist_y.get_xticks(), rotation=90) # grid? ax_scatter.grid(b=grid, which='major', axis='both', **kargs_grids) ax_hist_x.grid(b=grid, which='major', axis='both', **kargs_grids) ax_hist_y.grid(b=grid, which='major', axis='both', **kargs_grids) return (ax_scatter, ax_hist_x, ax_hist_y)