有没有办法使用Dropdown小部件来更新Bokeh上的绘图设置



有人知道如何使用bokeh中的下拉菜单来更改绘图中的设置吗?我真的不想更改数据,这是我通常看到的。我想把一个轴的刻度变成对数。

这是我迄今为止所拥有的相关部分:

p3 = figure(y_axis_label='The scale is {}'.format(selected_scale), y_axis_type=selected_scale)
p3.line( x='date', y='value', source = src, legend_label='a label',muted_color=color[k], muted_alpha=0.1, alpha=.9)
def button_callback():
sys.exit()  # Stop the server
# Button to stop the server
exit_button = Button(label="Stop", button_type="warning", background='red', width=50)
exit_button.on_click(button_callback)
# --------------------------------------------------------------------------------

# Scale change
def change_scale(attr, old, new):
selected_scale = seleccion.value
p3 = figure(y_axis_label='The scale is {}'.format(selected_scale), y_axis_type=selected_scale)
print(seleccion.value, new, 'Hello!!!')
selec = Select(title='Scale', options=['log', 'linear'], value='log', width=50)
selec.on_change('value', change_scale)
layout3 = gridplot([[selec], [p3], [exit_button]])
curdoc().add_root(layout3)

然后我在Jupyter笔记本上运行

!bokeh serve --show .COVID19Bokeh.ipynb --port 5001

它确实在我的浏览器上打开了一个带有正确绘图的新选项卡,但它不会像我期望的那样更改p3的设置。

事实上,在我回到jupyter笔记本后(关闭选项卡后(,我确实得到了来自print(seleccion.value, new, 'Hello!!!')语句的所有打印,但没有变化。。。

通过在回调中使用p3 = figure(...)而不实际使用p3,您只是在创建一个全新的绘图,然后在不使用的情况下将其丢弃。

在Bokeh中,如果你想更改某些内容,通常应该直接更改模型。有时,替换父模型的子模型。

话虽如此,特别是轴类型更改并不是一件得到很好支持的事情,因此您可能会遇到一些问题,这些问题需要比您预期的多得多的代码。一些与讨论相关的链接:

  • https://github.com/bokeh/bokeh/issues/6575
  • https://github.com/bokeh/bokeh/issues/5316
  • https://discourse.bokeh.org/t/dynamic-change-scale-from-linear-to-log/5100

一个我从未测试过的想法-您可以尝试创建两个轴,并通过更改它们的visible属性在它们之间切换。

最新更新