def get_updates(self):
        es = self.es
        index = self.index
        xname, xmin, xmax, xbins = self.xname, self.xmin, self.xmax, self.xbins
        yname, ymin, ymax, ybins = self.yname, self.ymin, self.xmax, self.xbins

        x, y, c = get_2d_hist(xname, xmin, xmax, xbins, yname, ymin, ymax, ybins, es, index=index)
        x, y, c = map(np.array, [x, y, c])

        # compute color codes using the given cmap
        cmap = self.cmap
        norm = mpl.colors.Normalize(vmin=0, vmax=np.percentile(c, 90), clip=True)
        mapper = cm.ScalarMappable(norm=norm, cmap=cmap)

        colors_int = (mapper.to_rgba(c) * 256).astype(int)

        ascode = lambda (r, g, b, a): "#{:02x}{:02x}{:02x}".format(r, g, b)
        color_codes = np.apply_along_axis(ascode, -1, colors_int)

        quads_renderer = self.fig.select(dict(name="quads"))[0]
        quads_ds = quads_renderer.data_source
        quads_ds.data["fill_color"] = color_codes
        quads_ds.data["line_color"] = color_codes

        return [quads_ds]
def draw_2d_hist_from_es(xname,xmin,xmax,xbins,
                 yname,ymin,ymax,ybins,
                 es,index="*",ax = None):
    """i plot the 2d histogram (heatmap) of a variables xname and yname 
    between [xmin,xmax],[ymin,ymax] with [xbins,ybins] uniform bins respectively.
    i require es to be an elasticsearch.Elasticsearch client"""
    if ax is None:
        ax = figure()
    
    x,y,c = get_2d_hist(xname,xmin,xmax,xbins,
                 yname,ymin,ymax,ybins,
                 es,index=index)
    bin_w = (xmax-xmin)/float(xbins)
    bin_h = (ymax-ymin)/float(ybins)
    x = map(lambda x_i: int(x_i/bin_w), x) 
    y = map(lambda y_i: int(y_i/bin_h), y) 

    
    
    ax.x_range= brange(start=xmin,end=xmax)
    ax.y_range= brange(start=xmax,end=xmin)
    img = np.zeros([xbins,ybins])
    img[x,y] = c
    return ax.image(image=[img], x=[xmin], y=[ymax], 
         dw=[xmax-xmin], dh=[ymax-ymin], palette='RdYlBu11')
def draw_2d_hist_from_es(xname,xmin,xmax,xbins,
                 yname,ymin,ymax,ybins,
                 es,index="*",ax = None,
                 cmap = cm.gist_earth,quad_name="quads"):
    """i plot the 2d histogram (heatmap) of a variables xname and yname 
    between [xmin,xmax],[ymin,ymax] with [xbins,ybins] uniform bins respectively.
    i require es to be an elasticsearch.Elasticsearch client"""
    
    x,y,c = get_2d_hist(xname,xmin,xmax,xbins,
                 yname,ymin,ymax,ybins,
                 es,index=index)
    x,y,c = map(np.array,[x,y,c])
    ax = classic_heatmap(x,y,c,xmin,xmax,xbins,ymin,ymax,ybins,
                       fig=ax,cmap=cmap,quad_name=quad_name)

    return ax
    def __init__(self, xname, xmin, xmax, xbins, yname, ymin, ymax, ybins, es, index="run*", fig=None, cmap=cm.RdYlBu):
        if fig is None:
            fig = figure()

        self.es = es
        self.index = index

        self.xname, self.xmin, self.xmax, self.xbins = xname, xmin, xmax, xbins
        self.yname, self.ymin, self.ymax, self.ybins = yname, ymin, ymax, ybins

        # get first histogram
        x, y, c = get_2d_hist(xname, xmin, xmax, xbins, yname, ymin, ymax, ybins, es, index=index)
        x, y, c = map(np.array, [x, y, c])

        self.cmap = cmap
        self.fig = vis_bokeh.classic_heatmap(x, y, c, xmin, xmax, xbins, ymin, ymax, ybins, fig=fig, cmap=cmap)