使用Bokeh,如何在保持启用状态的情况下隐藏工具的图标?

时间:2019-10-25 18:23:06

标签: bokeh

使用Bokeh,如何在保持启用状态的同时隐藏工具的图标?

在某些情况下,我在一个图中有多个p.line()图。根据{{​​3}},每个折线图都有其自己的悬停工具。 不过,让每个悬停工具都有自己的图标并不是很吸引人:

this question

因此,我考虑过保留多个悬停工具,但对用户隐藏了它们。 我有什么选择?

谢谢。

1 个答案:

答案 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,
            ))

enter image description here

但是这样做需要用户首先单击按钮,因此,执行此操作的一种更优雅的方法可能是使用here描述的方法在页面加载时调用JS代码。