Bokeh切换套索/悬停

时间:2017-06-21 14:59:22

标签: javascript python html callback bokeh

我在散景中有一个套索和悬停工具,每个工具都有一个类似的回调来与辅助绘图进行交互(悬停将显示与单个数据点关联的元数据,而套索将显示相同的元数据平均值点)。

回调单独用于悬停和套索,但当两者都处于活动状态时,悬停占主导地位。我想制作的是用户可以选择套索或悬停但不能同时选择两者。

有没有办法在更改活动工具时触发回调,最好是在CustomJS中,这样我就不必运行散景服务器?

以下是输出的一些示例代码和here is a link

from bokeh.io import output_file
from bokeh.layouts import row 
from bokeh.plotting import figure, show
from bokeh.models import (
    ColumnDataSource, CustomJS,
    HoverTool, LassoSelectTool)

output_file('toggle_lasso_hover.html')

s1 = ColumnDataSource({
    'x': [0, 1, 2], 
    'y': [1, 1, 1]
})
s2 = ColumnDataSource({
    'x': [], 
    'y': []
})
js_args = {'s1': s1, 's2': s2} 
js_code = """ 
    var d1 = s1.data;
    var d2 = {'x': [], 'y': []};

    for (i=0; i < inds.length; i++) {
        j = inds[i];
        d2['x'].push(d1['x'][j]);
        d2['y'].push(d1['y'][j]);
    }
    s2.data = d2;
    s2.change.emit();
"""
on_hover = CustomJS(args=js_args, code="""
    var inds = cb_data.index['1d'].indices;
    %s
""" % js_code)
on_lasso = CustomJS(args=js_args, code="""
    var inds = cb_obj.selected['1d'].indices;
    %s
""" % js_code)

p1 = figure(
    width=300, height=300, tools="reset", active_drag=None)
p1.circle('x', 'y', source=s1, size=20, color='blue')

# define tools
hover = HoverTool(tooltips=None, callback=on_hover)
lasso = LassoSelectTool()

p1.add_tools(hover)
p1.add_tools(lasso)
s1.callback = on_lasso

p2 = figure(
    width=300, height=300, x_range=p1.x_range, y_range=p1.y_range,
    toolbar_location=None)
p2.circle('x', 'y', source=s2, size=20, color='green')

lout = row(p1, p2) 
show(lout)

0 个答案:

没有答案