С Bokeh, как скрыть значок инструмента, оставив его включенным? - PullRequest
0 голосов
/ 25 октября 2019

Как с помощью Bokeh скрыть значок инструмента, оставив его включенным?

В некотором контексте у меня есть несколько графиков p.line () на одной фигуре. Каждый линейный график имеет свой собственный инструмент для наведения, как указано в на этот вопрос . Я не считаю привлекательным, чтобы у каждого инструмента наведения был свой значок:

multiple hover tool icons.

Поэтому я подумал о сохранении нескольких инструментов наведения, носкрывая их от пользователя. Какие у меня варианты?

Заранее спасибо.

1 Ответ

0 голосов
/ 26 октября 2019

Во-первых, я хотел бы спросить себя, хочет ли пользователь скрытое наведение, которое нельзя отключить? Итак, первый вариант, который я хотел бы предложить, это добавить 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

Но для этого требуется, чтобы пользователь сначала нажал кнопку, поэтому, возможно, более элегантный способ сделать это - вызвать код JS, уже загруженный на страницу, используя подходописано здесь .

...