У меня проблемы с обратным вызовом CustomJS на TapTool.Я хотел бы заставить выбор 50 пунктов после того, как один щелкнул.Поэтому я сделал обратный вызов JavaScript, который модифицирует список индексов, выбранных в источнике данных, и должен обновить график.В консоли я вижу, что источник данных обновлен, а график - нет.
Я сделал тестовую версию из примера документации (https://bokeh.pydata.org/en/latest/docs/user_guide/interaction/callbacks.html), но он также не работает.Это потому, что есть другой способ обновить график при изменении выбора?
Вот тестовая версия, которую я сделал:
from bokeh.layouts import column
from bokeh.models import CustomJS, ColumnDataSource, Slider
from bokeh.plotting import Figure, output_file, show
output_notebook()
x = [x*0.005 for x in range(0, 200)]
y = x
source = ColumnDataSource(data=dict(x=x, y=y))
plot = Figure(plot_width=400, plot_height=400)
plot.circle('x', 'y', source=source, line_width=3, line_alpha=0.6)
callback = CustomJS(args=dict(source=source), code="""
var l_selected=source.selected;
var indices = l_selected['1d'].indices;
if(indices.length <= 1) {
var new_indices = Array.from(new Array(50), (x,i) => i + indices[0]);
l_selected['1d'].indices=new_indices;
}
source.selected=l_selected;
console.log(source.selected)
source.change.emit();
""")
slider = Slider(start=0.1, end=4, value=1, step=.1, title="power")
slider.js_on_change('value', callback)
plot.add_tools(TapTool(callback=callback))
layout = column(slider, plot)
show(layout)
Я не знаю, может ли это бытьполезно, но я использую версию Bokeh 0.12.16 и пытаюсь заставить ее работать в ноутбуке Jupyter