在服务器模式下,Bokeh绘图线条不会自动更新,需要使用回调函数来手动更新绘图。
以下是一个示例代码,展示了如何在勾选CheckboxGroup后,更新Bokeh绘图线条:
from bokeh.plotting import figure, curdoc
from bokeh.models import CheckboxGroup
from bokeh.layouts import column
# 创建一个空的Figure对象
p = figure()
# 创建一个CheckboxGroup对象
checkbox_group = CheckboxGroup(labels=["Line 1", "Line 2"])
# 定义绘图数据
x = [1, 2, 3, 4, 5]
y1 = [1, 2, 3, 4, 5]
y2 = [5, 4, 3, 2, 1]
# 定义绘制线条的函数
def update_line():
p.line(x, y1, line_width=2, line_color='blue', legend_label='Line 1' if 0 in checkbox_group.active else None)
p.line(x, y2, line_width=2, line_color='red', legend_label='Line 2' if 1 in checkbox_group.active else None)
# 创建一个回调函数来更新绘图
def checkbox_callback(attr, old, new):
p.renderers = [] # 清空之前的绘图
update_line() # 调用更新线条函数
p.legend.click_policy = 'hide' # 设置点击图例隐藏线条
# 将CheckboxGroup的回调函数与回调函数关联
checkbox_group.on_change('active', checkbox_callback)
# 初始化绘图
update_line()
# 创建布局
layout = column(checkbox_group, p)
# 将布局添加到文档
curdoc().add_root(layout)
在这个示例中,我们创建了一个CheckboxGroup对象,用于选择要显示的线条。然后,定义了一个回调函数checkbox_callback
,当CheckboxGroup的选中状态发生变化时,该函数将被调用。在回调函数中,我们首先清空之前的绘图,然后调用update_line
函数来绘制新的线条。最后,我们将CheckboxGroup对象的active
属性与回调函数关联起来。
请注意,为了使绘图能够更新,需要在回调函数中调用p.renderers = []
来清空之前的绘图。此外,为了隐藏不选中的线条,我们设置了p.legend.click_policy = 'hide'
。
通过以上代码,当勾选CheckboxGroup中的选项时,Bokeh绘图线条将会更新。