2017-08-31 107 views
2

首先,偉大的網站,偉大的人。你們所有人都幫助我學習了很多東西。謝謝!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

您是否安裝了散景版本0.12.6?我複製了你的代碼,它可以與谷歌瀏覽器一起使用。 – Anthonydouc

+0

嗨。我已經安裝了Bokeh 0.12.4。我的辦公室版本更新並不容易,所以我會在家裏嘗試。我懷疑這與我在Chrome中的設置有關。感謝您的建議。 – Kah

+0

我認爲0.12.4 change.emit()不是註冊源數據更改的正確語法。這將是我的猜測,除非JavaScript被禁用,你可能會意識到。嘗試用s2.trigger('change')替換s2.change.emit()並重試它(不要在0.12.6中使用它)。 – Anthonydouc

回答

2

的問題是在背景虛化版本的差異,您使用的版本0.12.4。在散景版本0.12.4中,要在列數據源中註冊更改,您需要使用語法source.change('trigger').

最新版本的文檔(這是您引用的示例源自的地方)的示例使用版本0.12.6。 從散景版本0.12.6開始,這是折舊的,語法現在變成了source.change.emit()

相關問題