使用HoverTool()工具时仅显示一个工具提示

gg3*_*349 4 python tooltip bokeh

我在Bokeh中绘制了很多点,并且我已经将HoverTool添加到图的工具列表中,以便x,y鼠标在接近字形时显示鼠标的坐标.

当鼠标接近紧密堆积在一起的一组字形时,我会获得与字形一样多的工具提示.我只想要一个工具提示,一个最接近的字形.这不仅仅是一个演示细节,因为对于很多点,这会导致:

  • 在与绘图的缓慢交互中,浏览器在生成所有工具提示时卡住
  • 在一个非常长的工具提示中,相同的信息重复多次,因为许多字形都靠近光标

下面是一个示例,其中包含复制行为的代码: 在此输入图像描述

import numpy.random
from bokeh.plotting import figure, output_notebook, show
from bokeh.models import HoverTool
output_notebook()

hover = HoverTool()
hover.tooltips = [("(x,y)", "($x, $y)")]

x = numpy.random.randn(500)
y = numpy.random.randn(500)

p = figure(tools=[hover])
p.circle(x,y, color='red', size=14, alpha=0.4)

show(p)
Run Code Online (Sandbox Code Playgroud)

pst*_*102 8

我遇到了类似的问题,并提出了使用自定义工具提示的解决方案.我在顶部插入一个样式标记,它只显示该类div下的第一个子.bk-tooltip项,这是第一个工具提示.

这是一个有效的例子:

from bokeh.plotting import figure, show
from bokeh.models import HoverTool, Range1d

custom_hover = HoverTool()

custom_hover.tooltips = """
    <style>
        .bk-tooltip>div:not(:first-child) {display:none;}
    </style>

    <b>X: </b> @x <br>
    <b>Y: </b> @y
"""

p = figure(tools=[custom_hover]) #Custom behavior
#p = figure(tools=['hover'])  #Default behavior 

p.circle(x=[0.75,0.75,1.25,1.25], y=[0.75,1.25,0.75,1.25], size=230, color='red', fill_alpha=0.2)
p.y_range = Range1d(0,2)
p.x_range = Range1d(0,2)

show(p)
Run Code Online (Sandbox Code Playgroud)

这是一种hacky解决方案,但它适用于Safari,Firefox和Chrome.我想他们很快就会推出更长远的解决方案.


小智 5

使用 Bokeh 2.2.2 发布的 CSS 解决方案对我不起作用。做了以下事情:

    div.bk-tooltip.bk-right>div.bk>div:not(:first-child) {
        display:none !important;
    }
    div.bk-tooltip.bk-left>div.bk>div:not(:first-child) {
        display:none !important;
    }
Run Code Online (Sandbox Code Playgroud)

不是最优雅的解决方案,但它以 40 个垂直堆叠的工具提示结束了我的挫败感。这是通过带有自定义 CSS 的网站上的嵌入式图表实现的。