Javascript Python Bokeh,回调示例在浏览器中不工作

Javascript Python Bokeh,回调示例在浏览器中不工作,javascript,jquery,python,html,bokeh,Javascript,Jquery,Python,Html,Bokeh,首先,伟大的网站,伟大的人。你们在我的学习上帮了我很多。谢谢 我在Bokeh和浏览器方面有问题。特别是,我正在尝试让Javascript回调在Bokeh中工作 我从这个网站下载了这个示例代码 该网站包含一个使用套索工具的示例 该代码在网站上运行得非常好,但是当我将代码复制到Python中并自己运行时,JS回调就不起作用了。套索工具部分工作正常。我试过在IE、Chrome、Firefox、工作电脑和家用电脑上运行这个 一般来说,我对Javascript不是很在行,因此对这个问题的任何洞察都将不胜

首先,伟大的网站,伟大的人。你们在我的学习上帮了我很多。谢谢

我在Bokeh和浏览器方面有问题。特别是,我正在尝试让Javascript回调在Bokeh中工作

我从这个网站下载了这个示例代码

该网站包含一个使用套索工具的示例

该代码在网站上运行得非常好,但是当我将代码复制到Python中并自己运行时,JS回调就不起作用了。套索工具部分工作正常。我试过在IE、Chrome、Firefox、工作电脑和家用电脑上运行这个

一般来说,我对Javascript不是很在行,因此对这个问题的任何洞察都将不胜感激

干杯并提前表示感谢

代码来自以下网站:

from random import random

from bokeh.layouts import row
from bokeh.models import CustomJS, ColumnDataSource
from bokeh.plotting import figure, output_file, show

output_file("callback.html")

x = [random() for x in range(500)]
y = [random() for y in range(500)]

s1 = ColumnDataSource(data=dict(x=x, y=y))
p1 = figure(plot_width=400, plot_height=400, tools="lasso_select", title="Select Here")
p1.circle('x', 'y', source=s1, alpha=0.6)

s2 = ColumnDataSource(data=dict(x=[], y=[]))
p2 = figure(plot_width=400, plot_height=400, x_range=(0, 1), y_range=(0, 1),
            tools="", title="Watch Here")
p2.circle('x', 'y', source=s2, alpha=0.6)

s1.callback = CustomJS(args=dict(s2=s2), code="""
        var inds = cb_obj.selected['1d'].indices;
        var d1 = cb_obj.data;
        var d2 = s2.data;
        d2['x'] = []
        d2['y'] = []
        for (i = 0; i < inds.length; i++) {
            d2['x'].push(d1['x'][inds[i]])
            d2['y'].push(d1['y'][inds[i]])
        }
        s2.change.emit();
    """)

layout = row(p1, p2)

show(layout)
从随机导入随机
从bokeh.layouts导入行
从bokeh.models导入CustomJS,ColumnDataSource
从bokeh.plotting导入图形,输出_文件,显示
输出文件(“callback.html”)
x=[random()表示范围(500)内的x]
y=[random()表示范围(500)内的y]
s1=列数据源(数据=dict(x=x,y=y))
p1=图形(绘图宽度=400,绘图高度=400,工具=“套索选择”,标题=“在此处选择”)
p1.圆('x','y',源=s1,α=0.6)
s2=ColumnDataSource(数据=dict(x=[],y=[]))
p2=图形(绘图宽度=400,绘图高度=400,x范围=(0,1),y范围=(0,1),
tools=“”,title=“在此处观看”)
p2.圆('x','y',源=s2,α=0.6)
s1.callback=CustomJS(args=dict(s2=s2),code=“”
var inds=cb_对象所选['1d']指数;
var d1=cb_对象数据;
var d2=s2.0数据;
d2['x']=[]
d2['y']=[]
对于(i=0;i
问题在于bokeh版本有所不同,您使用的是0.12.4版。在bokeh版本0.12.4中,要在列数据源中注册更改,需要使用语法
source.change('trigger')。

最新版本的文档中的示例(您引用的示例来源于此)使用版本0.12.6。
从bokeh版本0.12.6开始,这一点被降低,语法现在变成了
source.change.emit()

您是否安装了bokeh版本0.12.6?我复制了你的代码,它可以与google chrome.Hi一起使用。我在工作中安装了Bokeh 0.12.4。更新office版本对我来说并不容易,所以我会在家里试试。我怀疑这与我在Chrome中的设置有关。谢谢您的建议。我认为在0.12.4中,change.emit()不是注册源数据更改的正确语法。这是我的猜测,除非您可能知道禁用了javascript。尝试用s2.trigger('change')替换s2.change.emit(),然后重试(不过不要将其用于0.12.6)。是的!谢谢谢谢谢谢!!我似乎不能说你回答了这个问题。。。