Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Bokeh拨动套索/悬停_Javascript_Python_Html_Callback_Bokeh - Fatal编程技术网

Javascript Bokeh拨动套索/悬停

Javascript Bokeh拨动套索/悬停,javascript,python,html,callback,bokeh,Javascript,Python,Html,Callback,Bokeh,我在bokeh有一个套索和一个悬停工具,每个工具都有一个类似的回调来与二次绘图交互(悬停将显示与单个数据点相关的元数据,而套索将显示跨点平均的相同元数据) 回调分别对hover和lasso起作用,但当两者都处于活动状态时,hover起主导作用。我想做的是,用户可以选择套索或悬停,但不能同时选择两者 有没有一种方法可以在活动工具更改时触发回调,最好是在CustomJS中,这样我就不必运行bokeh服务器了 下面是一些示例代码和输出 from bokeh.io import output_file

我在bokeh有一个套索和一个悬停工具,每个工具都有一个类似的回调来与二次绘图交互(悬停将显示与单个数据点相关的元数据,而套索将显示跨点平均的相同元数据)

回调分别对hover和lasso起作用,但当两者都处于活动状态时,hover起主导作用。我想做的是,用户可以选择套索或悬停,但不能同时选择两者

有没有一种方法可以在活动工具更改时触发回调,最好是在CustomJS中,这样我就不必运行bokeh服务器了

下面是一些示例代码和输出

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)
从bokeh.io导入输出文件
从bokeh.layouts导入行
从bokeh.plotting导入图形,显示
从bokeh.models导入(
ColumnDataSource、CustomJS、,
悬停工具、拉索选择工具)
输出文件('toggle\u lasso\u hover.html')
s1=列数据源({
“x”:[0,1,2],
y:[1,1,1]
})
s2=ColumnDataSource({
“x”:[],
‘y’:[]
})
js_args={'s1':s1,'s2':s2}
js_代码=”“”
var d1=s1.1数据;
变量d2={'x':[],'y':[]};
对于(i=0;i