cr.selection_glyph = Circle(fill_color=cls_color_mapper, line_color=cls_color_mapper) cr.nonselection_glyph = Circle(fill_color=cls_color_mapper, line_color=cls_color_mapper, fill_alpha=0.05, line_alpha=0.05) color_bar = ColorBar(color_mapper=LinearColorMapper(palette="Viridis256", low=1, high=10), label_standoff=12, border_line_color=None, location=(0, 0)) p.add_layout(color_bar, 'right') color_bar.visible = False if type(cls_color_mapper['transform']) is LinearColorMapper: color_bar.color_mapper = cls_color_mapper['transform'] # p.add_layout(color_bar, 'right') color_bar.visible = True # Define widgets hover_tip_tool = HoverTool(tooltips=generate_tooltip_html(), show_arrow=False, renderers=[cr]) wheel_zoom_tool = WheelZoomTool() file_select_dropdown = Dropdown(label="Data file", button_type="warning", height_policy='min', menu=[('refresh list', 'refresh_list'), None]) update_file_list() color_class_select = Select(title="Colored by:", value=features_list[0], options=features_list[:],
def GENE(self): def gcw(*args, **kwargs): return self.ccwidget('geneview_' + args[0], *args[1:], **kwargs, setnamer='gene') #widgets w = dict( gene=gcw('gene_name', 'text'), warn=widgets.HTML(), ) # data samples = self.counttable.columns nosamples = len(samples) #gene mapper gmapper = CMAPPER(self, name='gene') gmapper.method = 'gene' defgene = self.counttable.std(1).sort_values().tail(1).index[0] gmapper.value = defgene w['gene'].value = defgene #color mapper cmapper = CMAPPER(self, name='color') cmapper.method = 'metadata' cmapper.value = 'plate' #sort order smapper = CMAPPER(self, name='sort') smapper2 = CMAPPER(self, name='sort 2') def get_sort_order(): sdf = pd.DataFrame({ 1: smapper.score.sort_values(), 2: smapper2.score.sort_values() }) sdf = sdf.sort_values(by=[1, 2]) return sdf.index sort_order = get_sort_order() pdata = ColumnDataSource( dict( x=pd.Series(range(nosamples), index=sort_order), y=gmapper.score.loc[sort_order], score=cmapper.score.loc[sort_order], )) pdata2 = pd.DataFrame( dict( x=pd.Series(range(nosamples), index=sort_order), y=gmapper.score.loc[sort_order], score=cmapper.score.loc[sort_order], )) bfigure = bokeh_figure( plot_width=FIGSIZE[0], plot_height=int(FIGSIZE[1] * 0.8), # tools = bokeh_tools, y_range=bmodels.Range1d(gmapper.min(), gmapper.max()), toolbar_sticky=False, toolbar_location='left', title='geneplot') #bbar = bokeh_chart.Bar(pdata2, 'x', values='y', group='plate') bfigure.title.text_color = 'darkgrey' bfigure.title.text_font_style = 'normal' bfigure.title.text_font_size = "12px" bplot = bfigure.vbar(x='x', width=0.5, bottom=0, top='y', source=pdata, legend='score', color=dict(field='score', transform=cmapper.colormapper)) blegend = bfigure.legend[0].items[0] bcolorbar = ColorBar(color_mapper=gmapper.colormapper, ticker=BasicTicker(), formatter=BasicTickFormatter(precision=1), label_standoff=10, border_line_color=None, location=(0, 0)) null_colorbar_mapper = LinearColorMapper(palette='Inferno256', low=0, high=0) if cmapper.discrete: #remove ColorBar bcolorbar.color_mapper = null_colorbar_mapper else: #remove legend bfigure.legend[0].items.pop( ) #remove legend - we can add this later again bfigure.add_layout(bcolorbar, 'right') # # display widgets display(ilabel('gene', w['gene'])) cmapper.display() smapper.display() smapper2.display() display(w['warn']) #for k, v in bplot.data_source.data.items(): # print(k, v.shape, v.dropna().shape) bhandle = bokeh_io.show(bfigure, notebook_handle=True) #bhandle = bokeh_io.show(bbar, notebook_handle=True) def warn(message): w['warn'].value = '<b>{}</b>'.format(message) def on_gene_change(*args): gene = w['gene'].value if not gene in self.counttable.index: warn("gene {} is not in current counttable".format(gene)) return sortorder = get_sort_order() gmapper.value = gene yval = gmapper.score.loc[sortorder] bplot.data_source.data['y'] = yval bokeh_io.push_notebook(handle=bhandle) def on_sort_change(*args): order = get_sort_order() d = bplot.data_source.data d['x'].index = order d['y'] = d['y'].loc[order] d['score'] = d['score'].loc[order] bokeh_io.push_notebook(handle=bhandle) def on_color_change(*args): order = get_sort_order() score = cmapper.score score = score.loc[order] bplot.data_source.data['score'] = score bplot.glyph.fill_color['transform'] = cmapper.colormapper cm = cmapper.colormapper self._cm = cm if cmapper.discrete: warn('discrete') bcolorbar.color_mapper = null_colorbar_mapper if not bfigure.legend[0].items: bfigure.legend[0].items.append(blegend) else: warn('cont') bcolorbar.color_mapper = cmapper.colormapper if bfigure.legend[0].items: bfigure.legend[0].items.pop() bokeh_io.push_notebook(handle=bhandle) smapper.on_change = on_sort_change smapper2.on_change = on_sort_change cmapper.on_change = on_color_change w['gene'].on_submit(on_gene_change) on_gene_change on_color_change on_sort_change