Bokeh Taptool вернуть выбранный индекс - PullRequest
0 голосов
/ 23 мая 2018

Мне нужно получить индекс выбранной точки данных на графике Боке, который должен быть вводом другой функции в моем веб-приложении.

Я использую функцию обратного вызова Bokeh Taptool CustomJS.Тем не менее, я не мог найти способ получить фактический индекс выбранной точки, кроме «console.log».Есть ли способ вернуть этот индекс за пределы JavaScript?

Ниже приведен мой код.Я новичок в Javascript и Bokeh.Спасибо за любую помощь заранее.

codes = """
    var index_selected = source.selected['1d']['indices'][0];
    source.trigger('change');

    console.log(index_selected);
    """
taptool.callback = CustomJS(args=dict(source=source),code = codes)

Ответы [ 2 ]

0 голосов
/ 28 июля 2019

Это работает с multi_line:

selected_src = ColumnDataSource(dict(indices=[])

def handle_selection_change(_attr, # should be 'data'
                            old_indices, 
                            new_indices):
   ...

selected_src.on_change('data', handle_selection_change)

taptool.callback = CustomJS(
    args=dict(source=source, selected=selected_src),
    code = """
       selected.data = { "indices" : source.selected.indices };
    """)
0 голосов
/ 25 мая 2018

В следующем примере показаны два треугольника.При нажатии на треугольник печатается соответствующий индекс.В примере не используется CustomJS.

from bokeh.models import ColumnDataSource
from bokeh.plotting import figure
from bokeh.io import curdoc

def my_tap_handler(attr,old,new):
    index = source.selected.indices
    print(index)

source = ColumnDataSource(data=dict(
    x=[[1,2,3],[7,8,8,]],
    y=[[2,1,3],[6,8,7]]
))
p = figure(tools="tap")

renderer = p.patches('x', 'y', source=source)
renderer.data_source.on_change("selected", my_tap_handler)
curdoc().add_root(p)
...