首页 > 解决方案 > 在绘图中的 ColumnDataSource 更改时触发 JavaScript 回调

问题描述

当 ColumnDataSource 用新数据更新时,Bokeh 中是否有办法触发 JavaScript 回调?

我正在寻找类似的东西......

cds1 = ColumnDataSource(some_pandas_dataframe)
cds1.js_onchange('', callback) # attach some kind of callback here to do something when cds1.data changes.
cds2 = ColumnDataSource(some_pandas_dataframe)

cds1.data.update(cds2.data)

标签: javascriptpythonbokeh

解决方案


在 Bokeh v1.1.0 中执行此操作的一种方法是将回调附加到 的data属性ColumnDataSource

import numpy as np
from bokeh.plotting import Figure, show, curdoc
from bokeh.models import CustomJS, ColumnDataSource, Button, Column
from bokeh.events import Tap

cds = ColumnDataSource(data = dict(x = [0.1, 0.9], y = [0.1, 0.9]))
p = Figure(x_range = (0, 1), y_range = (0, 1), tools = "")
p.scatter(x = 'x', y = 'y', source = cds)

data = dict(x = [0.5], y = [0.5])
callback = CustomJS(args = {'cds': cds, 'data': data}, code = "cds.data = data")

button = Button(label = 'click me')
button.js_on_event('button_click', callback)

cds.js_on_change('data', CustomJS(code = "alert('data_change_detected');"))

show(Column(p, button))

推荐阅读