为了账号安全,请及时绑定邮箱和手机立即绑定

散点图:以交互方式更改圆半径

散点图:以交互方式更改圆半径

繁花不似锦 2021-10-26 13:29:24
我在散景中有一个散点图,我希望用户能够以交互方式使用滑块更改图的所有圆圈的辐射。到目前为止,我只能设法做到这一点:from bokeh.plotting import figure, showfrom bokeh.models import CustomJS, Sliderfrom bokeh.layouts import columnimport pandas as pdradius = 0.3source = pd.DataFrame([[1, 2], [3, 5], [3, 4]], columns=['a','b']) p = figure()p.scatter(x='a', y='b', source=source, radius=radius)callback = CustomJS(args=dict(radius=radius), code="""        var radius = cb_obj.get('value');        source.trigger('change');    """)slider = Slider(start=0.1, end=1.0, value=0.3, step=.05, title="Circle-radius", callback=callback)layout = column(p, slider)show(layout)但是当我改变滑块时圆半径不会改变。
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

您正在将滑块的值读入本地 JavaScript 变量中,但实际上并未将其用于任何用途。要影响字形,您实际上需要设置字形的某些属性,或更新驱动字形的数据。为此,您可以在dict 中传递Bokeh 对象args(像您所做的那样传递纯 python 值通常没有意义)。


此外,该.get语法很久以前就被删除了,除非您使用的是 Bokeh 的古老版本,否则您应该使用cb_obj.value.


这是一个使用 Bokeh > 1.0 测试的完整示例


from bokeh.plotting import figure, show

from bokeh.models import CustomJS, Slider

from bokeh.layouts import column

import pandas as pd


source = pd.DataFrame([[1, 2], [3, 5], [3, 4]], columns=['a','b'])

p = figure()

r = p.circle(x='a', y='b', source=source, radius=0.3)


callback = CustomJS(args=dict(renderer=r), code="""

    renderer.glyph.radius = cb_obj.value;

""")


slider = Slider(start=0.1, end=1.0, value=0.3, step=.05, title="Circle-radius")

slider.js_on_change('value', callback)


show(column(p, slider))

最后,虽然callbackBokeh 1.x 仍然支持该属性,但它很快就会被弃用。新代码应该使用js_on_change上面显示的一般方法。

//img1.sycdn.imooc.com//617792540001e67b04680036.jpg

查看完整回答
反对 回复 2021-10-26
  • 1 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信