def test_callback_property_executes(self, bokeh_model_page): group = RadioButtonGroup(labels=LABELS, css_classes=["foo"]) group.callback = CustomJS(code=RECORD("active", "cb_obj.active")) page = bokeh_model_page(group) el = page.driver.find_element_by_css_selector('.foo .bk-btn:nth-child(3)') el.click() results = page.results assert results['active'] == 2 el = page.driver.find_element_by_css_selector('.foo .bk-btn:nth-child(1)') el.click() results = page.results assert results['active'] == 0 assert page.has_no_console_errors()
def test_callback_property_executes(self, bokeh_model_page): group = RadioButtonGroup(labels=LABELS, css_classes=["foo"]) group.callback = CustomJS(code=RECORD("active", "cb_obj.active")) page = bokeh_model_page(group) el = page.driver.find_element_by_css_selector( 'div.foo div label input[value="2"]') el = el.find_element_by_xpath('..') el.click() results = page.results assert results['active'] == 2 el = page.driver.find_element_by_css_selector( 'div.foo div label input[value="0"]') el = el.find_element_by_xpath('..') el.click() results = page.results assert results['active'] == 0 assert page.has_no_console_errors()
radio = RadioButtonGroup(labels=['Gauche', 'Droite'], active=0) slider = Slider(start=10, end=100, value=10, step=1, title='Nombre de rectangles') radio.callback = CustomJS(args=dict(radio=radio, left=left, right=right), code=""" switch(radio.active){ case 0: left.visible = true; right.visible = false; break; case 1: left.visible = false; right.visible = true; break; default: left.visible = true; right.visible = true; } """) slider.callback = CustomJS(args=dict(source=source, slider=slider), code=""" var a = 0; var b = Math.PI; var data = source.data; var f = Math.cos; var x = a;
radio_group.callback = CustomJS(args=sources, code=""" var capitalGainsType = radio_group.active === 0 ? capital_gains_no : capital_gains_yes; elasticity_option.set('labels', capitalGainsType.data.labels); while (elasticity_option.active > capitalGainsType.data.source_ids.length - 1) { elasticity_option.active = elasticity_option.active - 1; } ref.data = eval(capitalGainsType.data.source_ids[elasticity_option.active]).data; ref.trigger('change'); """) elasticity_option.callback = CustomJS(args=sources, code=""" var capitalGainsType = radio_group.active === 0 ? capital_gains_no : capital_gains_yes; ref.data = eval(capitalGainsType.data.source_ids[elasticity_option.active]).data; ref.trigger('change'); """) # create layout ----------------- controls = column(radio_group_text, radio_group, elasticity_text, elasticity_option) plots = dict(header=title_div, left=controls, center=fig) script, divs = components(plots) template_args = dict() template_args['bokeh_script'] = script template_args['plots'] = divs template_args['page_title'] = 'Box Plot' render_template('responsive', template_args, 'index.html')
def show_cells_on_stack(data, stack, X='X', Y='Y', channelNames=None, group='group', hue='hue', palette='Spectral11', default=0, alpha=.5, plot_width=500, plot_height=500, vmin=0, vmax=3, znorm=True): ''' stack: np. array of shape (nchannels,height,width) ''' from bokeh.models import CheckboxGroup, RadioButtonGroup, Legend, LegendItem if not channelNames: channelNames = ['Channel ' + str(i) for i in range(len(stack))] print(channelNames) s1 = ColumnDataSource(data=data) p1 = figure(plot_width=plot_width, plot_height=plot_height, tools="pan,wheel_zoom,reset") channels = {} for i, channel in enumerate(channelNames): img = stack[i] if znorm: img = (img - img.mean()) / img.std() channels[i] = p1.image(image=[img], x=[0], y=[0], dw=[plot_width], dh=[plot_height], color_mapper=LogColorMapper(palette=palette, low=vmin, high=vmax), global_alpha=alpha, visible=(i == default)) plots = {} #scaled_coordinates to fit in stack_dw,stack_dh dh_ratio = plot_height / img.shape[0] dw_ratio = plot_width / img.shape[1] data['warped_X'] = data[X] * dw_ratio data['warped_Y'] = data[Y] * dh_ratio groups = list(data[group].unique()) for g_id in groups: s2 = ColumnDataSource(data=data[data[group] == g_id]) scatter = p1.circle('warped_X', 'warped_Y', source=s2, alpha=1, color='hue') #,legend_label = str(g_id)) scatter.visible = False plots[g_id] = scatter select_celltype = CheckboxGroup(labels=groups, active=[], width=100) select_channel = RadioButtonGroup(labels=channelNames, active=default, width=100, orientation='horizontal') select_celltype.callback = CustomJS(args={ 'plots': plots, 'groups': groups, 'msel': select_celltype, 'fig': p1 }, code=""" //fig.title.text = 'new Title' for (var i =0; i<groups.length;i++){ plots[groups[i]].visible = msel.active.indexOf(i)>-1 } """) select_channel.callback = CustomJS(args={ 'channels': channels, 'sel': select_channel, 'fig': p1 }, code=""" //fig.title.text = Object.keys(channels).length.toString() for (var i =0; i<Object.keys(channels).length;i++){ channels[i].visible = false } var val = sel.active channels[val].visible = true /** if (val==0){ fig.title.text = 'confirm upper' chan1.visible = true chan2.visible = false //bg_channel = [z[0]] }else if (val==1){ fig.title.text = 'confirm lower' chan1.visible = false chan2.visible = true //bg_channel = [z[1]] } **/ """) layout = column(p1, select_celltype, select_channel) show(layout)
} source_sf_rate1.trigger('change'); source_sf_rate2.trigger('change'); source_abq_rate1.trigger('change'); source_abq_rate2.trigger('change'); source_det_rate1.trigger('change'); source_det_rate2.trigger('change'); source_sf_price1.trigger('change'); source_sf_price2.trigger('change'); source_abq_price1.trigger('change'); source_abq_price2.trigger('change'); source_det_price1.trigger('change'); source_det_price2.trigger('change'); """) radio_button_group_city.callback = callback radio_button_group_outlier.callback = callback radio_button_group_var.callback = callback plot.xgrid.grid_line_color = None plot.ygrid.grid_line_color = "white" plot.grid.grid_line_width = 2 plot.xaxis.major_label_text_font_size="12pt" #plot.xaxis.major_label_orientation = -pi/4 plot.xaxis.axis_label = 'Variable' plot.yaxis.axis_label = 'Value' layout_boxplot = column(row(radio_button_group_city, radio_button_group_var), radio_button_group_outlier, plot) ###output html file
# create callbacks --------------- radio_group.callback = CustomJS(args=sources, code=""" var capitalGainsType = radio_group.active === 0 ? capital_gains_no : capital_gains_yes; elasticity_option.set('labels', capitalGainsType.data.labels); while (elasticity_option.active > capitalGainsType.data.source_ids.length - 1) { elasticity_option.active = elasticity_option.active - 1; } ref.data = eval(capitalGainsType.data.source_ids[elasticity_option.active]).data; ref.trigger('change'); """) elasticity_option.callback = CustomJS(args=sources, code=""" var capitalGainsType = radio_group.active === 0 ? capital_gains_no : capital_gains_yes; ref.data = eval(capitalGainsType.data.source_ids[elasticity_option.active]).data; ref.trigger('change'); """) # create layout ----------------- controls = column(radio_group_text, radio_group, elasticity_text, elasticity_option) plots = dict(header=title_div, left=controls, center=fig) script, divs = components(plots) template_args = dict() template_args['bokeh_script'] = script