Bokeh Taptool返回选定的索引

时间:2018-05-23 00:30:08

标签: javascript python bokeh

我需要在Bokeh图中获取所选数据点的索引,这需要是我的Web应用程序中另一个函数的输入。

我正在使用Bokeh的Taptool CustomJS Callback。但是,除了'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 :(得分:0)

以下示例绘制了两个三角形。通过点击三角形,可以打印相应的索引。该示例不使用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)

答案 1 :(得分:0)

这适用于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.indices.selected };
    """)