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

我在散景中有一个散点图,我希望用户能够以交互方式使用滑块更改图的所有圆圈的辐射。


到目前为止,我只能设法做到这一点:


from bokeh.plotting import figure, show

from bokeh.models import CustomJS, Slider

from bokeh.layouts import column

import pandas as pd


radius = 0.3

source = 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)

但是当我改变滑块时圆半径不会改变。


繁花不似锦
浏览 162回答 1
1回答

慕运维8079593

您正在将滑块的值读入本地 JavaScript 变量中,但实际上并未将其用于任何用途。要影响字形,您实际上需要设置字形的某些属性,或更新驱动字形的数据。为此,您可以在dict 中传递Bokeh 对象args(像您所做的那样传递纯 python 值通常没有意义)。此外,该.get语法很久以前就被删除了,除非您使用的是 Bokeh 的古老版本,否则您应该使用cb_obj.value.这是一个使用 Bokeh > 1.0 测试的完整示例from bokeh.plotting import figure, showfrom bokeh.models import CustomJS, Sliderfrom bokeh.layouts import columnimport pandas as pdsource = 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上面显示的一般方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python