使用Bokeh,如何在保持启用状态的同时隐藏工具的图标?
在某些情况下,我在一个图中有多个p.line()图。根据{{3}},每个折线图都有其自己的悬停工具。 不过,让每个悬停工具都有自己的图标并不是很吸引人:
因此,我考虑过保留多个悬停工具,但对用户隐藏了它们。 我有什么选择?
谢谢。
答案 0 :(得分:0)
首先,我要问自己一个问题,即用户是否想要一个无法禁用的隐藏悬停?
因此,我建议的第一个选择是,不向每个渲染器添加tooltips
,而是向figure
添加一个HoverTool
图标,该图标将应用于图中的所有线条,如下所示:(Bokeh v1 .3.0)
from bokeh.plotting import figure, show
from bokeh.models import HoverTool, Column, Button, CustomJS
import numpy as np
p = figure(toolbar_location='above',
tooltips=[("x", "@x")]
)
lines = [p.line(np.arange(10), np.random.random(10)) for i in range(3)]
for i in range(len(lines)):
p.add_tools(HoverTool(tooltips=[("x", "@x")], renderers=[lines[i]]))
# button = Button(label='Hide Hover Icon')
# code = ''' hover_btns = document.getElementsByClassName('bk-tool-icon-hover')
# for(i=0; i<hover_btns.length; i++)
# hover_btns[i].style.display = 'none' '''
#
# button.callback = CustomJS(code=code)
show(Column(p,
# button,
))
然后,如果您真的不想在工具栏中看到任何悬停图标,则可以添加在按钮单击时执行的JS回调,该回调将隐藏所有悬停图标,如下所示:
from bokeh.plotting import figure, show
from bokeh.models import HoverTool, Column, Button, CustomJS
import numpy as np
p = figure(toolbar_location='above',
# tooltips=[("x", "@x")]
)
lines = [p.line(np.arange(10), np.random.random(10)) for i in range(3)]
for i in range(len(lines)):
p.add_tools(HoverTool(tooltips=[("x", "@x")], renderers=[lines[i]]))
button = Button(label='Hide Hover Icon')
code = ''' hover_btns = document.getElementsByClassName('bk-tool-icon-hover')
for(i=0; i<hover_btns.length; i++)
hover_btns[i].style.display = 'none' '''
button.callback = CustomJS(code=code)
show(Column(p,
button,
))
但是这样做需要用户首先单击按钮,因此,执行此操作的一种更优雅的方法可能是使用here描述的方法在页面加载时调用JS代码。