我在将 Widget 回调与 Bokeh 一起使用时遇到一些困难。在复选框小部件的帮助下,我想显示/隐藏相应的绘图。
与的区别这个问题 https://stackoverflow.com/questions/38705123/using-multiselect-widget-to-hide-and-show-lines-in-bokeh,是我想要每个字形的图(而不是同一图上的所有字形)。为了example https://i.stack.imgur.com/S84tK.png,如果我勾选/取消勾选“b”,我想看到一个新的字形图。
编辑:我的代码的新版本
from bokeh.io import output_file, show
from bokeh.layouts import column, widgetbox, row
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure
from bokeh.models.widgets import CheckboxGroup
from bokeh.models import CustomJS
import pandas as pd
import numpy as np
if __name__ == '__main__':
# Plot tools
TOOLS = 'box_select,box_zoom,reset'
# Data Source
df = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
source = ColumnDataSource(df)
# Create a new glyph and share ranges
g = figure(plot_width=1300, plot_height=150, title='a', tools=TOOLS)
g.circle(source=source, x='a', y='a')
glyph_list = []
for glyph in range(0, len(source.column_names)):
glyph_list.append((figure(plot_width=1300, plot_height=150, x_range=g.x_range, title=source.column_names[glyph],
tools=TOOLS)))
glyph_list[glyph].circle(source=source, x='a', y=source.column_names[glyph])
# Select the glyphs to plot
initial_list = [0] * len(source.column_names)
## example of a change
initial_list[2] = 1
# Callback
code = """
????
"""
callback = CustomJS(args=dict(source=source), code=code) #????
# Add checkbox widget
checkbox_group = CheckboxGroup(labels=source.column_names,
callback=callback,
active=initial_list)
plot_list = []
for i in range(0, len(source.column_names)):
if checkbox_group.active[i] == 1:
plot_list.append(glyph_list[i])
checkbox_group.js_on_change('active', callback) # ???
layout = row(column(plot_list), widgetbox(checkbox_group))
show(layout)