def create_color_pickers(self) -> column: color_pickers = [] for i, plot in enumerate(self.plot): picker = ColorPicker(color=plot.glyph.fill_color, width=100) picker.on_change("color", partial(self.handle_color_change, i)) color_pickers.append(picker) return column(*color_pickers)
def create_color_pickers(self) -> list: colors = self.source.data["color"] color_pickers = [] for i, category in enumerate(self.categories): title = "Color" if i == 0 else "" picker = ColorPicker(color=colors[i], title=title, width=100) picker.on_change("color", partial(self.handle_color_change, i)) color_pickers.append(picker) return color_pickers
def modify_doc(doc): source = ColumnDataSource(dict(x=[1, 2], y=[1, 1], val=["a", "b"])) plot = Plot(plot_height=400, plot_width=400, x_range=Range1d(0, 1), y_range=Range1d(0, 1), min_border=0) plot.add_glyph(source, Circle(x='x', y='y')) plot.add_tools(CustomAction(callback=CustomJS(args=dict(s=source), code=RECORD("data", "s.data")))) colorpicker = ColorPicker(color='red', css_classes=["foo"]) def cb(attr, old, new): source.data['val'] = [old.lower(), new.lower()] # ensure lowercase of hexa strings colorpicker.on_change('color', cb) doc.add_root(column(colorpicker, plot)) return doc
def _redraw_conditions(self): self._root_widget.children = [] current_row = Row() cond_idx = 0 for cond in self._conditions: cp = ColorPicker(color=self.colors.get(cond, "blue"), title=cond, width=60) cp.on_change( "color", lambda attr, old, new: self._update_color( cond, attr, old, new)) self.color_pickers[cond] = cp if cond_idx == self._columns: self._root_widget.children.append(current_row) current_row = Row() current_row.children.append(cp) self._root_widget.children.append(current_row)
def test_display_color_input(self, bokeh_model_page: BokehModelPage) -> None: colorpicker = ColorPicker() page = bokeh_model_page(colorpicker) el = find_element_for(page.driver, colorpicker, "input") assert el.get_attribute('type') == "color" assert page.has_no_console_errors()
def test_input_value(self, bokeh_model_page: BokehModelPage) -> None: colorpicker = ColorPicker(color="red") page = bokeh_model_page(colorpicker) el = find_element_for(page.driver, colorpicker, "input") assert el.get_attribute('value') == '#ff0000' assert page.has_no_console_errors()
def test_display_color_input(self, bokeh_model_page) -> None: colorpicker = ColorPicker(css_classes=["foo"]) page = bokeh_model_page(colorpicker) el = page.driver.find_element_by_css_selector('.foo input') assert el.get_attribute('type') == "color" assert page.has_no_console_errors()
def test_input_value(self, bokeh_model_page) -> None: colorpicker = ColorPicker(color='red', css_classes=["foo"]) page = bokeh_model_page(colorpicker) el = page.driver.find_element_by_css_selector('.foo input') assert el.get_attribute('value') == '#ff0000' assert page.has_no_console_errors()
def test_displays_title(self, bokeh_model_page): colorpicker = ColorPicker(css_classes=["foo"], title="title") page = bokeh_model_page(colorpicker) el = page.driver.find_element_by_css_selector('.foo label') assert el.text == "title" el = page.driver.find_element_by_css_selector('.foo input') assert el.get_attribute('type') == "color" assert page.has_no_console_errors()
def test_server_on_change_round_trip( self, bokeh_server_page: BokehServerPage) -> None: colorpicker = ColorPicker(color="red") page = bokeh_server_page(mk_modify_doc(colorpicker)) el = find_element_for(page.driver, colorpicker, "input") # new value enter_value_in_color_picker(page.driver, el, '#0000ff') page.eval_custom_action() results = page.results assert results['data']['val'] == ['#ff0000', '#0000ff']
def getTimeSeries_working(df_tws): df_tws['date'] = pd.to_datetime(df_tws['date'], format='%m/%d/%Y') grouped = df_tws.groupby( [pd.Grouper(key='date', freq='M'), 'keyword'])['sentiment'].count().to_frame(name='count').reset_index() # pivot = df_tws.pivot_table(index='date', columns=pd.Grouper(key = 'date', freq='W'), values = 'sentiment', aggfunc='count') # print(pivot.info()) # grouped = pivot.groupby(pd.Grouper(key='date', freq='D'))['keyword'].count() print(grouped) source = ColumnDataSource(grouped) p = figure(plot_height=400, x_axis_type='datetime') p.line(x='date', y='count', line_width=2, source=source, legend='Music') p.line(x='date', y='count', line_width=2, source=source, legend='Art') p.yaxis.axis_label = 'Number of Tweets' color_picker = ColorPicker(color="#ff4466", title="Choose color:", width=200) #p.add_layout(color_picker) show(color_picker) return p
node_size_dropdown = Dropdown(label="Node size based on", menu=Setter.NODE_BASED_ON) node_size_dropdown.on_event('menu_item_click', VisualizerHandler.node_size_based_callback) CACHE.widgets.node_size_dropdown = node_size_dropdown node_color_dropdown = Dropdown(label="Node color based on", menu=Setter.NODE_COLORS) node_color_dropdown.on_event('menu_item_click', VisualizerHandler.node_color_callback) CACHE.widgets.node_color_dropdown = node_color_dropdown # ------------------ Other widgets ------------------- # color_picker = ColorPicker(title="Color picker") color_picker.on_change('color', VisualizerHandler.color_callback) CACHE.widgets.color_picker = color_picker # -------------------------------------- Statistics visualisation ---------------------------------------------------- default_stat_tools = "save,hover," adjacency_tooltips = [("Weight", "@size")] p_adjacency = figure(title="Adjacency matrix", toolbar_location="above", tooltips=adjacency_tooltips, tools=default_stat_tools, output_backend="webgl", **STATIC.figure)
def create_color_picker(self) -> ColorPicker: picker = ColorPicker(title="Color", color=self.text_color, width=100) picker.on_change("color", self.handle_color_change) return picker
def __init__(self, image_views, disp_min=0, disp_max=1000, colormap="plasma"): """Initialize a colormapper. Args: image_views (ImageView): Associated streamvis image view instances. disp_min (int, optional): Initial minimal display value. Defaults to 0. disp_max (int, optional): Initial maximal display value. Defaults to 1000. colormap (str, optional): Initial colormap. Defaults to 'plasma'. """ lin_colormapper = LinearColorMapper( palette=cmap_dict[colormap], low=disp_min, high=disp_max ) log_colormapper = LogColorMapper(palette=cmap_dict[colormap], low=disp_min, high=disp_max) for image_view in image_views: image_view.image_glyph.color_mapper = lin_colormapper color_bar = ColorBar( color_mapper=lin_colormapper, location=(0, -5), orientation="horizontal", height=15, width=100, padding=5, ) self.color_bar = color_bar # ---- selector def select_callback(_attr, _old, new): if new in cmap_dict: lin_colormapper.palette = cmap_dict[new] log_colormapper.palette = cmap_dict[new] high_color.color = cmap_dict[new][-1] select = Select( title="Colormap:", value=colormap, options=list(cmap_dict.keys()), default_size=100 ) select.on_change("value", select_callback) self.select = select # ---- auto toggle button def auto_toggle_callback(state): if state: display_min_spinner.disabled = True display_max_spinner.disabled = True else: display_min_spinner.disabled = False display_max_spinner.disabled = False auto_toggle = CheckboxGroup(labels=["Auto Colormap Range"], default_size=145) auto_toggle.on_click(auto_toggle_callback) self.auto_toggle = auto_toggle # ---- scale radiobutton group def scale_radiobuttongroup_callback(selection): if selection == 0: # Linear for image_view in image_views: image_view.image_glyph.color_mapper = lin_colormapper color_bar.color_mapper = lin_colormapper color_bar.ticker = BasicTicker() else: # Logarithmic if self.disp_min > 0: for image_view in image_views: image_view.image_glyph.color_mapper = log_colormapper color_bar.color_mapper = log_colormapper color_bar.ticker = LogTicker() else: scale_radiobuttongroup.active = 0 scale_radiobuttongroup = RadioGroup( labels=["Linear", "Logarithmic"], active=0, default_size=145 ) scale_radiobuttongroup.on_click(scale_radiobuttongroup_callback) self.scale_radiobuttongroup = scale_radiobuttongroup # ---- display max value def display_max_spinner_callback(_attr, _old_value, new_value): self.display_min_spinner.high = new_value - STEP if new_value <= 0: scale_radiobuttongroup.active = 0 lin_colormapper.high = new_value log_colormapper.high = new_value display_max_spinner = Spinner( title="Max Display Value:", low=disp_min + STEP, value=disp_max, step=STEP, disabled=bool(auto_toggle.active), default_size=145, ) display_max_spinner.on_change("value", display_max_spinner_callback) self.display_max_spinner = display_max_spinner # ---- display min value def display_min_spinner_callback(_attr, _old_value, new_value): self.display_max_spinner.low = new_value + STEP if new_value <= 0: scale_radiobuttongroup.active = 0 lin_colormapper.low = new_value log_colormapper.low = new_value display_min_spinner = Spinner( title="Min Display Value:", high=disp_max - STEP, value=disp_min, step=STEP, disabled=bool(auto_toggle.active), default_size=145, ) display_min_spinner.on_change("value", display_min_spinner_callback) self.display_min_spinner = display_min_spinner # ---- high color def high_color_callback(_attr, _old_value, new_value): lin_colormapper.high_color = new_value log_colormapper.high_color = new_value high_color = ColorPicker( title="High Color:", color=cmap_dict[colormap][-1], default_size=90 ) high_color.on_change("color", high_color_callback) self.high_color = high_color # ---- mask color def mask_color_callback(_attr, _old_value, new_value): lin_colormapper.nan_color = new_value log_colormapper.nan_color = new_value mask_color = ColorPicker(title="Mask Color:", color="gray", default_size=90) mask_color.on_change("color", mask_color_callback) self.mask_color = mask_color
multi_select = MultiSelect(options=["Option %d" % (i+1) for i in range(16)], size=6) multi_choice = MultiChoice(options=["Option %d" % (i+1) for i in range(16)]) slider = Slider(value=10, start=0, end=100, step=0.5) range_slider = RangeSlider(value=[10, 90], start=0, end=100, step=0.5) date_slider = DateSlider(value=date(2016, 1, 1), start=date(2015, 1, 1), end=date(2017, 12, 31)) date_range_slider = DateRangeSlider(value=(date(2016, 1, 1), date(2016, 12, 31)), start=date(2015, 1, 1), end=date(2017, 12, 31)) spinner = Spinner(value=100) color_picker = ColorPicker(color="red", title="Choose color:") date_picker = DatePicker(value=date(2017, 8, 1)) paragraph = Paragraph(text="some text") div = Div(text="some <b>text</b>") pre_text = PreText(text="some text") def mk_tab(color): plot = figure(width=300, height=300) plot.scatter(flowers["petal_length"], flowers["petal_width"], color=color, fill_alpha=0.2, size=12) return Panel(title="Tab 1: %s" % color.capitalize(), child=plot) tabs = Tabs(tabs=[mk_tab("red"), mk_tab("green"), mk_tab("blue")])
# data widgets line_length = Slider(title="Line Length", value=250, start=0, end=1000, step=10) line_gap = Slider(title="Line Gap", value=50, start=0, end=1000, step=10) row_density = Slider(title="Row Density", value=80, start=0, end=90, step=10) column_density = Slider(title="Column Density", value=80, start=0, end=90, step=10) # plotting widgets row_color_widget = ColorPicker(title="Row Color") column_color_widget = ColorPicker(title="Column Color") row_color_widget.js_link('color', horizontal_lines.glyph, 'line_color') column_color_widget.js_link('color', vertical_lines.glyph, 'line_color') line_thickness = Slider(title="Line Thickness", value=1, start=0, end=10, step=1) line_thickness.js_link('value', vertical_lines.glyph, 'line_width') line_thickness.js_link('value', horizontal_lines.glyph, 'line_width') # Set up callbacks def update_data(attrname, old, new):
<br> <b>press</b> for quicker updates with a value multiplier (currently <ref id="{page_step_multiplier.id}"></ref>). """, refs=[page_step_multiplier]), position="right", target=spinner, closable=True, visible=True) tooltip_1 = Tooltip(content=HTML("""\ Your <b>choice</b> of color.<br>See more in bokeh's <a href="https://docs.bokeh.org/en/latest/">docs</a>. """), position="right") color_picker = ColorPicker(color="red", title="Choose color:", description=tooltip_1) date_picker = DatePicker(value=date(2017, 8, 1)) switch_0 = Switch(active=False) switch_1 = Switch(active=True, context_menu=Menu()) switch_help = HelpButton(tooltip=Tooltip(content=HTML(""" This is an <b>on</b> or <b>off</b> style of widget. <br> Right click on the widget to display the context menu. """), position="right"))
from bokeh.io import show from bokeh.models import ColumnDataSource, CustomJS, ColorPicker from bokeh.plotting import Figure from bokeh.layouts import row, widgetbox cds = ColumnDataSource(data=dict(x=(0, 1), y=(0, 1))) p = Figure(x_range=(0, 1), y_range=(0, 1)) w = ColorPicker(title="Line Color", color="red", height=20, width=100) line = p.line(x='x', y='y', source=cds, color=w.color) cb = CustomJS(args={'line': line}, code=""" line.glyph.line_color = cb_obj.color """) w.js_on_change('color', cb) show(row([widgetbox(w, width=100), p]))
from typing import Optional, Any import numpy as np from bokeh.plotting import figure, curdoc from bokeh.layouts import column from bokeh.models import TextInput, ColorPicker, Text # set a stage and general properties p = figure(plot_width=400, plot_height=800, tools='save') linewidth = 3.5 # warp and weft properties a = 0 # top position warpA b = 1 # top left position warpB b2 = -1 # top right position warpB color_picker = ColorPicker( color="#f666f0", title="Choose a color and hit return to start weaving:", width=400) black = "#000000" warpdefault0 = -2 # warp position on y axis, low end warpdefault1 = 60 # warp position on y axis, high end Y0A = -1.5 # the number of lines already woven Y1A = Y0A + 1.5 # pattern position Y0B = -2.5 # pattern position Y1B = Y0B + 1.5 # pattern position weft1 = -2 weft2 = 118 n = 1 # n should be the number of times that weft y has changed zen = 1 p.xgrid.grid_line_color = None p.ygrid.grid_line_color = None p.yaxis.major_label_text_color = None p.xaxis.major_label_text_color = None
from bokeh.io import output_file, show from bokeh.models import ColorPicker output_file("color_picker.html") color_picker = ColorPicker(color="#ff4466", title="Choose color:", width=200) show(color_picker)
from bokeh.io import show from bokeh.layouts import column from bokeh.models import ColorPicker from bokeh.plotting import figure plot = figure(x_range=(0, 1), y_range=(0, 1), width=350, height=350) line = plot.line(x=(0, 1), y=(0, 1), color="black", line_width=4) picker = ColorPicker(title="Line Color") picker.js_link('color', line.glyph, 'line_color') show(column(plot, picker))
def widgets(): from bokeh.io import show from bokeh.models import Select, CheckboxButtonGroup, Button, CheckboxGroup, ColorPicker, Dropdown, \ FileInput, MultiSelect, RadioButtonGroup, RadioGroup, Slider, RangeSlider, TextAreaInput, TextInput, Toggle, \ Paragraph, PreText, Div put_text('Button') button = Button(label="Foo", button_type="success") show(button) put_text('CheckboxButtonGroup') checkbox_button_group = CheckboxButtonGroup( labels=["Option 1", "Option 2", "Option 3"], active=[0, 1]) show(checkbox_button_group) put_text('CheckboxGroup') checkbox_group = CheckboxGroup(labels=["Option 1", "Option 2", "Option 3"], active=[0, 1]) show(checkbox_group) put_text('ColorPicker') color_picker = ColorPicker(color="#ff4466", title="Choose color:", width=200) show(color_picker) put_text('Dropdown') menu = [("Item 1", "item_1"), ("Item 2", "item_2"), None, ("Item 3", "item_3")] dropdown = Dropdown(label="Dropdown button", button_type="warning", menu=menu) show(dropdown) put_text('FileInput') file_input = FileInput() show(file_input) put_text('MultiSelect') multi_select = MultiSelect(title="Option:", value=["foo", "quux"], options=[("foo", "Foo"), ("bar", "BAR"), ("baz", "bAz"), ("quux", "quux")]) show(multi_select) put_text('RadioButtonGroup') radio_button_group = RadioButtonGroup( labels=["Option 1", "Option 2", "Option 3"], active=0) show(radio_button_group) put_text('RadioGroup') radio_group = RadioGroup(labels=["Option 1", "Option 2", "Option 3"], active=0) show(radio_group) put_text('Select') select = Select(title="Option:", value="foo", options=["foo", "bar", "baz", "quux"]) show(select) put_text('Slider') slider = Slider(start=0, end=10, value=1, step=.1, title="Stuff") show(slider) put_text('RangeSlider') range_slider = RangeSlider(start=0, end=10, value=(1, 9), step=.1, title="Stuff") show(range_slider) put_text('TextAreaInput') text_input = TextAreaInput(value="default", rows=6, title="Label:") show(text_input) put_text('TextInput') text_input = TextInput(value="default", title="Label:") show(text_input) put_text('Toggle') toggle = Toggle(label="Foo", button_type="success") show(toggle) put_text('Div') div = Div( text= """Your <a href="https://en.wikipedia.org/wiki/HTML">HTML</a>-supported text is initialized with the <b>text</b> argument. The remaining div arguments are <b>width</b> and <b>height</b>. For this example, those values are <i>200</i> and <i>100</i> respectively.""", width=200, height=100) show(div) put_text('Paragraph') p = Paragraph( text="""Your text is initialized with the 'text' argument. The remaining Paragraph arguments are 'width' and 'height'. For this example, those values are 200 and 100 respectively.""", width=200, height=100) show(p) put_text('PreText') pre = PreText(text="""Your text is initialized with the 'text' argument. The remaining Paragraph arguments are 'width' and 'height'. For this example, those values are 500 and 100 respectively.""", width=500, height=100) show(pre)
) from bokeh.models.glyphs import VBar vbar_selected = VBar(fill_alpha=0.2, fill_color='blue', line_color='blue', hatch_pattern='right_diagonal_line', hatch_color='blue', hatch_alpha=1.0, hatch_weight=0.5) vbar_nonselected = VBar(fill_alpha=0.2, fill_color='blue', line_color='blue') vbar_renderer.selection_glyph = vbar_selected vbar_renderer.nonselection_glyph = vbar_nonselected p2.xgrid.grid_line_color = None # removes gridlines picker = ColorPicker( title="Line Color") # allows to change the color of the bars picker.js_link( 'color', vbar_renderer.selection_glyph, 'fill_color') # link the selected bar color properties to the selector picker.js_link('color', vbar_renderer.selection_glyph, 'line_color') picker.js_link('color', vbar_renderer.selection_glyph, 'hatch_color') picker.js_link( 'color', vbar_renderer.nonselection_glyph, 'fill_color') # link the non-selected bar color properties to the selector picker.js_link('color', vbar_renderer.nonselection_glyph, 'line_color') picker.js_link( 'color', vbar_renderer.glyph, 'fill_color' ) # link the bar color properties to the selector for when no bar has been selected picker.js_link('color', vbar_renderer.glyph, 'line_color') # hover tool p2