[英]How can I call a JavaScript function from Python using Bokeh?
我有這種情況:
我正在考慮創建一個虛擬按鈕並從python運行此按鈕的click方法。 但是我認為這是不可能的。
那么,如何直接從python運行JavaScript函數?
從Bokeh 0.12.6
,能夠進行此類“遠程過程調用”仍然是一項開放功能要求 。
同時,最好的選擇是將CustomJS
回調添加到某些模型的某些屬性。 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]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.