要在Bokeh圖表中實現動態數據過濾,可以使用CustomJS回調來實現。以下是一個簡單的示例:
from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource, Slider, CustomJS
# 創建一個示例數據集
data = {'x': [1, 2, 3, 4, 5],
'y': [5, 4, 3, 2, 1]}
source = ColumnDataSource(data=data)
# 創建一個圖表
plot = figure()
plot.circle(x='x', y='y', source=source)
# 創建一個滑塊來過濾數據
slider = Slider(start=1, end=5, step=1, value=5, title='Filter')
slider.js_on_change('value', CustomJS(args=dict(source=source, slider=slider), code="""
var data = source.data;
var value = slider.value;
var x = data['x'];
var y = data['y'];
// 過濾數據
var new_x = [];
var new_y = [];
for (var i = 0; i < x.length; i++) {
if (y[i] >= value) {
new_x.push(x[i]);
new_y.push(y[i]);
}
}
// 更新數據源
source.data['x'] = new_x;
source.data['y'] = new_y;
source.change.emit();
"""))
# 顯示圖表
show(plot)
在這個示例中,我們創建了一個包含x和y值的數據集,并在圖表中繪制了一個散點圖。然后創建了一個滑塊,用于過濾數據。通過使用CustomJS回調函數,我們可以在滑塊值發生變化時過濾數據并更新圖表。