Python Bokeh,回调示例无法在浏览器

时间:2017-08-31 01:57:52

标签: javascript jquery python html bokeh

首先,伟大的网站,伟大的人。我的学习对你帮助很大。谢谢!

我遇到了Bokeh和浏览器的问题。特别是,我试图让一个Javascript回调在Bokeh中工作。

我从此网站https://bokeh.pydata.org/en/latest/docs/user_guide/interaction/callbacks.html下载了此示例代码。该网站包含使用套索工具的示例。

代码在网站上完美运行,但是当我将代码复制到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)

1 个答案:

答案 0 :(得分:3)

问题是散景版本有所不同,您使用的是版本0.12.4。在散景版本0.12.4中,要在列数据源中注册更改,您需要使用语法source.change('trigger').

最新版本文档(您引用的示例所源自的示例)的示例使用版本0.12.6。 从散景版本0.12.6开始,这是折旧的,语法现在变为source.change.emit()