Я пытаюсь пометить pandas-df (содержащий данные временных рядов) с помощью bokeh-lineplot, box_select tool и виджета TextInput в jupyter-notebook.Как получить доступ к выбранным точкам данных с помощью box_select?
Я попытался отредактировать похожий код проблемы ( Получить выбранные данные, содержащиеся в инструменте выбора ящика в Bokeh ), изменив CustomJS на что-тонапример:
source.callback = CustomJS(args=dict(p=p), code="""
var inds = cb_obj.get('selected')['1d'].indices;
[source.data['xvals'][i] for i in inds] = 'b'
"""
)
, но не может применить изменение к источнику выбранных точек.
Таким образом, краткосрочная цель состоит в том, чтобы манипулировать определенным столбцом источника выбранных точек.
В долгосрочной перспективе я хочу использовать виджет TextInput для маркировки выбранных точек с помощью предоставленного Textinput.Это будет выглядеть так:
РЕДАКТИРОВАТЬ:
Это текущий код, который я пытаюсь втетрадь, для восстановления вопроса:
from random import random
import bokeh as bk
from bokeh.layouts import row
from bokeh.models import CustomJS, ColumnDataSource, HoverTool
from bokeh.plotting import figure, output_file, show, output_notebook
output_notebook()
x = [random() for x in range(20)]
y = [random() for y in range(20)]
hovertool=HoverTool(tooltips=[("Index", "$index"), ("Label", "@label")])
source = ColumnDataSource(data=dict(x=x, y=y, label=[i for i in "a"*20]))
p1 = figure(plot_width=400, plot_height=400, tools="box_select", title="Select Here")
p1.circle('x', 'y', source=source, alpha=0.6)
p1.add_tools(hovertool)
source.selected.js_on_change('indices', CustomJS(args=dict(source=source), code="""
var inds = cb_obj.indices;
for (var i = 0; i < inds.length; i++) {
source.data['label'][inds[i]] = 'b'
}
source.change.emit();
""")
)
layout = row(p1)
show(layout)