首先,偉大的網站,偉大的人。你們所有人都幫助我學習了很多東西。謝謝!Python 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)
您是否安裝了散景版本0.12.6?我複製了你的代碼,它可以與谷歌瀏覽器一起使用。 – Anthonydouc
嗨。我已經安裝了Bokeh 0.12.4。我的辦公室版本更新並不容易,所以我會在家裏嘗試。我懷疑這與我在Chrome中的設置有關。感謝您的建議。 – Kah
我認爲0.12.4 change.emit()不是註冊源數據更改的正確語法。這將是我的猜測,除非JavaScript被禁用,你可能會意識到。嘗試用s2.trigger('change')替換s2.change.emit()並重試它(不要在0.12.6中使用它)。 – Anthonydouc