Bokeh Bokeh 服务器工具回调函数
在本文中,我们将介绍Bokeh Bokeh服务器中的回调函数。Bokeh是一个用于创建交互式可视化的Python库,它提供了一个强大的服务器工具,允许用户在网页浏览器中交互和控制可视化图形。回调函数是Bokeh服务器工具中的重要组成部分,它们可以帮助我们实现与用户的动态交互。
回调函数是在用户和可视化工具之间建立连接的桥梁。当用户与可视化工具进行交互时,例如点击按钮、拖动滑块或选择下拉菜单中的选项,回调函数将解析这些信息并根据用户的操作提供相应的反馈。回调函数的主要作用是根据用户的输入更新图形或执行其他操作。
Bokeh服务器提供了两种类型的回调函数:JavaScript回调函数和Python回调函数。JavaScript回调函数是直接在浏览器中执行的代码,而Python回调函数是Python解释器中执行的代码。我们可以根据实际需要选择合适的回调函数类型。
阅读更多:Bokeh 教程
JavaScript回调函数
JavaScript回调函数是使用Bokeh服务器工具创建交互式可视化的默认方式。我们可以将JavaScript回调函数与Bokeh工具进行绑定,例如按钮、滑块或下拉菜单。当用户与这些工具进行交互时,JavaScript回调函数将被触发并执行相应的代码。
下面是一个示例,演示了如何使用JavaScript回调函数更新图形。我们创建一个简单的柱形图,并将一个按钮与柱形图的颜色进行绑定。当用户点击按钮时,JavaScript回调函数将被触发并将柱形图的颜色更改为随机值。
from bokeh.io import curdoc
from bokeh.models import Button, ColumnDataSource
from bokeh.plotting import figure
from random import randint
# 创建一个柱形图
p = figure(x_range=["A", "B", "C"], y_range=(0, 10), plot_height=300)
source = ColumnDataSource(data=dict(x=["A", "B", "C"], y=[4, 7, 2]))
p.vbar(x="x", top="y", width=0.9, source=source)
# 创建一个按钮
button = Button(label="Change Color")
# 创建JavaScript回调函数
callback = CustomJS(args=dict(source=source), code="""
// 随机生成颜色值
function getRandomColor() {
var letters = '0123456789ABCDEF';
var color = '#';
for (var i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
// 更改柱形图的颜色
source.data.y = [Math.random() * 10, Math.random() * 10, Math.random() * 10];
source.change.emit();
// 更改按钮的颜色
button.css.background = getRandomColor();
""")
# 将按钮的回调函数与JavaScript回调函数绑定
button.js_on_event("button_click", callback)
# 将按钮和柱形图添加到文档
curdoc().add_root(column(button, p))
在上述示例中,我们使用CustomJS
创建了一个JavaScript回调函数。回调函数中的代码将在按钮点击时执行,通过随机生成的颜色值来更改柱形图的颜色,并将按钮的背景颜色更改为随机值。
Python回调函数
除了JavaScript回调函数,Bokeh服务器还提供了Python回调函数作为可选项。Python回调函数是在服务器端执行的代码,因此适合处理大量计算或访问外部数据源的情况。
下面是一个示例,演示了如何使用Python回调函数处理用户的输入。我们创建一个带有滑块的可视化,滑块的初始值为0。当用户拖动滑块时,Python回调函数将触发并将滑块的值打印到控制台。
from bokeh.io import curdoc
from bokeh.models import Slider
# 创建一个滑块
slider = Slider(title="Slider", start=0, end=10, value=0, step=1)
# 创建Python回调函数
def callback(attr, old, new):
print("Slider value:", new)
# 将回调函数与滑块绑定
slider.on_change("value", callback)
# 将滑块添加到文档
curdoc().add_root(slider)
在上述示例中,我们使用on_change
方法创建了一个Python回调函数。回调函数获取滑块的属性、旧值和新值,并将新值打印到控制台。
总结
回调函数在Bokeh Bokeh服务器工具中起着至关重要的作用,它们通过与用户的交互,实现了可视化的动态更新和操作。Bokeh服务器提供了JavaScript回调函数和Python回调函数两种类型,用户可以根据实际需求选择适合的回调函数类型。JavaScript回调函数适合用于浏览器端的交互,而Python回调函数适合处理大量计算或访问外部数据源的情况。掌握回调函数的使用将使我们能够创建出更加强大和交互性的可视化图形。