目前(Bokeh 0.12.6)不可能通过以下方式隐藏所有条形legend.click_policy="hide"
,如所述文档 http://bokeh.pydata.org/en/latest/docs/user_guide/interaction/legends.html:
交互式图例功能目前适用于“每个字形”图例。通过指定自动分组的列创建的图例尚不支持下述功能
但是,可以通过添加来隐藏栏复选框组() http://bokeh.pydata.org/en/latest/docs/reference/models/widgets.groups.html#bokeh.models.widgets.groups.CheckboxGroup使用 CustomJS 在单击复选框时隐藏栏。下面你可以看到一个MCVE https://stackoverflow.com/help/mcve,这也是作为 Jupyter Notebook 在线提供 https://kyso.io/tuomastik/bokeh_interactive_legend_hide_multiple_glyphs:
import numpy as np
from bkcharts import Bar, show
from bokeh.layouts import column
from bokeh.models import CheckboxGroup, CustomJS
data = {'University': ['ENGT'] * 3 + ['UBC'] * 3,
'Averages': [76.5, 79.9, 72.2, 71, 72, 69],
'Programs': ['CHML', 'CIVL', 'CPEN', 'CHML', 'CIVL', 'CPEN']}
group = "University"
bars = Bar(data=data, label='Programs', values="Averages", group=group,
plot_width=600, plot_height=400, title="Comparison")
checkboxes = CheckboxGroup(labels=np.unique(data[group]).tolist(),
# Make all checkboxes checked by default
active=list(range(np.unique(data[group]).size)))
checkboxes.callback = CustomJS(args=dict(bars=bars), code="""
var group = '%s';
function change_bars_visibility(checkbox_name, visible) {
for (j = 0; j < bars.renderers.length; j++) {
// Go through rendered objects
if (bars.renderers[j].attributes.hasOwnProperty('data_source') &&
bars.renderers[j].data_source.data[group][0] === checkbox_name) {
// Change the visibility of this rendered object if it belongs to
// the group determined by the checkbox that was clicked
bars.renderers[j].visible = visible;
}
}
}
for (i = 0; i < cb_obj.labels.length; i++) {
// Go through checkbox labels
var checkbox_name = cb_obj.labels[i];
if (cb_obj.active.indexOf(i) >= 0) {
// alert(checkbox_name + " is activated");
change_bars_visibility(checkbox_name, true);
}
else {
// alert(checkbox_name + " is disabled");
change_bars_visibility(checkbox_name, false);
}
}
""" % group)
show(column(bars, checkboxes))