python - 如何将不同的回调链接到 Python Bokeh 中的每个 CheckboxButtonGroup 按钮
问题描述
我是 Bokeh 的新手,正在尝试学习如何使用它的功能。我正在尝试一个使用带有三个单独按钮的 CheckbokButtonGroup 的简单示例。目标是按下按钮 1 并让它在 y 轴上的字形中添加或减去 3,具体取决于它是被点击的偶数还是奇数次,按钮 2 应该将现有项目乘以 3 或 -3,具体取决于奇数或偶数点击和按钮 3 应根据点击次数将项目提升 3 或 -3 的幂。我的问题是,如何将组中的每个按钮链接到单独的回调函数?在提供的示例中,我能够将一个回调链接到所有按钮,但我希望每个按钮都有一个不同的回调。
from bokeh.models import ColumnDataSource, CustomJS, Button
from bokeh.models import CheckboxButtonGroup
from bokeh.plotting import Figure, output_file, show
from bokeh.layouts import column
output_file("js_on_change.html")
x = [1.2, 2.4, 0.8, 5.6, 12.1, 8.8]
y = [3.4, 1.1, 4.2, 6.6, 1.8, 12.1]
z = ['Apple', 'Apple', 'Orange', 'Orange', 'Orange', 'Orange']
data = dict(x=x, y=y, z=z)
source = ColumnDataSource(data)
counter = [0]
counter = dict(counter=counter)
counter1 = ColumnDataSource(counter)
counter2 = ColumnDataSource(counter)
counter3 = ColumnDataSource(counter)
plot = Figure(plot_width=400, plot_height=400)
plot.circle('x', 'y', source=source, size=8, line_alpha=0.6)
callback1 = CustomJS(args=dict(source=source, counter=counter1), code="""
var f = 3.0
var count = counter.data;
var c = count['counter']
if (c[0]%2==1) f = -1*f;
c[0]++
counter.change.emit();
var data = source.data;
var x = data['x']
var y = data['y']
for (var i = 0; i < x.length; i++) {
y[i] = y[i] + f
}
source.change.emit();
""")
callback2 = CustomJS(args=dict(source=source, counter=counter2), code="""
var f = 3.0
var count = counter2.data;
var c = count['counter']
if (c[0]%2==1) f = -1*f;
c[0]++
counter.change.emit();
var data = source.data;
var x = data['x']
var y = data['y']
for (var i = 0; i < x.length; i++) {
y[i] = y[i] * f
}
source.change.emit();
""")
callback3 = CustomJS(args=dict(source=source, counter=counter3), code="""
var f = 3.0
var count = counter3.data;
var c = count['counter']
if (c[0]%2==1) f = -1*f;
c[0]++
counter.change.emit();
var data = source.data;
var x = data['x']
var y = data['y']
for (var i = 0; i < x.length; i++) {
y[i] = Math.pow(x[i], f)
}
source.change.emit();
""")
LABELS = ["Add Subtract", "Multiply", "Power"]
checkbox_button_group = CheckboxButtonGroup(labels=LABELS, active=[0, 1, 2])
checkbox_button_group.js_on_click(callback1)
layout = column(checkbox_button_group, plot)
show(layout)
解决方案
推荐阅读
- elasticsearch - 部分词分词器与面向词的分词器 Elasticsearch
- tensorflow - 模块 'tensorflow' 没有属性 'logging'
- javascript - React-Mapbox-GL 大大降低了整个应用程序的速度
- ios - 如何在获取核心数据之后但在显示表视图之前更新依赖于当前时间的字段?
- c# - 如何从稍后在方程式中传递的单个文本框中获取 2 个不同的浮点数。(C#)
- ios - 与蜂窝网络相比,在 wifi 上的 React-native 获取速度非常慢。在开发和生产中,无论运行/不是调试器
- kubernetes - 无法在谷歌云中使用 kubernetes 公开部署
- multithreading - 在 Lparallel 库中使用队列(Common Lisp)
- android - Xamarin.Android 设计器是阿拉伯语的 VS 错误
- php - 上传文件 PHP EC2 不工作没有错误