首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >依赖Sliders与Bokeh,如何编写回调

依赖Sliders与Bokeh,如何编写回调
EN

Stack Overflow用户
提问于 2016-05-03 11:46:32
回答 1查看 1.8K关注 0票数 2

我想要能够滑过许多的情节,这是模拟的结果,跨越3+的维度。我正在通过Python使用Bokeh包。

为了简单起见,让我们假设我有两个维度: d和nc。但是nc在以下方面依赖于d:

代码语言:javascript
复制
if d=100, nc=56,57
if d=20, nc=5,6

我有四张照片:

代码语言:javascript
复制
 d_100_nc_56.png, 
 d_100_nc_57.png, 
 d_20_nc_5.png,
 d_20_nc_6.png

所以我想要两个滑块,一个是d,另一个是nc,通过.png的image_url函数循环Bokeh.plotting.Figure图像。但是,当我在d中更改滑块时,nc滑块的值应该更新。

代码语言:javascript
复制
from bokeh.io import vform
from bokeh.models import CustomJS, ColumnDataSource, Slider
from bokeh.plotting import Figure, output_file, show

output_file('image.html')

source = ColumnDataSource(data=dict(url=['d_100_nc_55.png']))

p = Figure(x_range=(0,1), y_range=(0,1))

callback_nc = CustomJS(args=dict(source=source),  code="""
    var data = source.get('data');
    var f = cb_obj.get('value')
    old = data['url'][0]
    to_replace=old.substring(old.lastIndexOf("nc_")+3,old.lastIndexOf(".png"))

    data['url'][0] = old.replace(to_replace,f.toString(10))
    source.trigger('change');
""")

callback_d = CustomJS(args=dict(source=source), code="""
    var data = source.get('data');
    var f = cb_obj.get('value')
    old = data['url'][0]
    to_replace=old.substring(old.lastIndexOf("d_")+2,old.lastIndexOf("_nc_"))

    data['url'][0] = old.replace(to_replace,f.toString(10))
    source.trigger('change');
""")

p.image_url('url',source=source, x=0, y=1,w=1,h=1)
p.text(x=0,y=0,text=source.data['url'])
slider_nc = Slider(start=55, end=65, value=1, step=1, title="nc", callback=callback_nc)
slider_d = Slider(start=20, end=100, value=100, step=80, title="density", callback=callback_d)

layout = vform(slider_nc,slider_d, p)
show(layout)

但是,我不知道如何将d滑块作为参数传递给nc滑块,以获取其属性并动态更新它们。这有可能吗?否则,它很大程度上限制了多个滑块通过bokeh的使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-03 12:57:50

编辑:更新以获得更多的最新版本

您以传递source的方式传递滑块,作为args字典中的一个项。在那里传递的任何Python端Bokeh模型都会自动提供给回调。然后,BokehJS模型属性与参考指南中描述的python属性完全匹配,这里是一个基于另一个滑块更新滑块的示例:

代码语言:javascript
复制
# Example from Bokeh 0.12.x

from bokeh.plotting import show, output_file
from bokeh.layouts import column
from bokeh.models import CustomJS, Slider

s1 = Slider(start=1, end=10, value=1, step=1)
s2 = Slider(start=0, end=1, value=0, step=1)

s1.callback = CustomJS(args=dict(s1=s1, s2=s2), code="""
    s2.end = s1.value;
""")

output_file("foo.html")

show(column(s1,s2))
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37003278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档