我有這樣的場景:如何使用Bokeh從Python調用JavaScript方法?
- 我有一些數據(在熊貓數據幀),我用它來畫我的陰謀
- 當我按下一個按鈕(由背景虛化部件內置),我可以打電話給我的回調方法,我在python中進行計算。
- 但是現在我想將計算的數據發回給用戶,以便在嚮導中顯示問題。所以我需要運行一些JavaScript函數。
我想創建一個虛擬按鈕,並從python運行此按鈕的點擊方法。但我認爲這是不可能的。
那麼,我怎樣才能直接從python運行JavaScript函數?
我有這樣的場景:如何使用Bokeh從Python調用JavaScript方法?
我想創建一個虛擬按鈕,並從python運行此按鈕的點擊方法。但我認爲這是不可能的。
那麼,我怎樣才能直接從python運行JavaScript函數?
截至散景0.12.6
,能夠進行這種「遠程過程調用」的仍然是open feature request。
與此同時,你最好的選擇是增加一個CustomJS
callback某些模型的財產。 CustomJS
可以執行任何你想要的JS代碼(包括調用其他JS函數),並會觸發任何屬性更新。
下面是一個示例,顯示每當滑塊更改時調用CustomJS
。對於您的用例,您可能會添加一個不可見的圓形字形,並將CustomJS
附加到字形的size
屬性。更改glyph.size
是您如何「調用」該功能。
from bokeh.layouts import column
from bokeh.models import CustomJS, ColumnDataSource, Slider
from bokeh.plotting import Figure, output_file, show
output_file("js_on_change.html")
x = [x*0.005 for x in range(0, 200)]
y = x
source = ColumnDataSource(data=dict(x=x, y=y))
plot = Figure(plot_width=400, plot_height=400)
plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6)
callback = CustomJS(args=dict(source=source), code="""
var data = source.data;
var f = cb_obj.value
x = data['x']
y = data['y']
for (i = 0; i < x.length; i++) {
y[i] = Math.pow(x[i], f)
}
source.change.emit();
""")
slider = Slider(start=0.1, end=4, value=1, step=.1, title="power")
slider.js_on_change('value', callback)
layout = column(slider, plot)
show(layout)
小例子,顯示什麼布賴恩回答我
from bokeh.plotting import figure
from bokeh.models.sources import ColumnDataSource
from bokeh.models.callbacks import CustomJS
from bokeh.io import curdoc
from bokeh.layouts import column
from bokeh.models.widgets import Button
plot = figure(
width=600,
height=600,
)
source = ColumnDataSource({
'x': [1, 2, 3],
'y': [4, 5, 6],
})
cr = plot.circle(
x='x', y='y',
source=source, size=10, color="navy", alpha=0.5
)
callback = CustomJS(args=dict(source=source), code="""
console.log('This code will be overwritten')
""")
cr.glyph.js_on_change('size', callback)
def cb():
js_code = """
alert('Hello!');
"""
callback.code = js_code # update js code
cr.glyph.size += 1 # trigger the javascript code
bt = Button(
label="Start Bokeh",
button_type="success"
)
bt.on_click(cb)
curdoc().add_root(column([bt, plot]))