有人知道如何使用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
属性在它们之间切换。