【问题标题】:Python bokeh apply hovertools only on model not on figurePython bokeh 仅在模型上应用悬停工具而不是在图上
【发布时间】:2017-01-15 09:50:48
【问题描述】:

我想在同一个图中有一个散点图和一条(基线)线。而且我只想在分散的圆圈上使用HoverTool,而不是在线上。有可能吗?

使用下面的代码,当我将鼠标悬停在线上(线的任何部分)时,我会得到带有 index: 0(x, y): (???, ???) 的工具提示。但是source 中的index: 0 数据完全不同((x, y): (1, 2))...

df = pd.DataFrame({'a':[1, 3, 6, 9], 'b':[2, 3, 5, 8]})

from bokeh.models import HoverTool
import bokeh.plotting as bplt

TOOLS = ['box_zoom', 'box_select', 'wheel_zoom', 'reset', 'pan', 'resize', 'save']

source = bplt.ColumnDataSource(data=df)
hover = HoverTool(tooltips=[("index", "$index"), ("(x, y)", "(@a, @b)")])

p = bplt.figure(plot_width=600, plot_height=600, tools=TOOLS+[hover],
    title="My sample bokeh plot", webgl=True)

p.circle('a', 'b', size=10, source=source)

p.line([0, 10], [0, 10], color='red')

bplt.save(p, 'c:/_teszt.html')

谢谢!!

【问题讨论】:

    标签: python hover tooltip bokeh


    【解决方案1】:

    要限制您希望 HoverTool 在哪些渲染器上处于活动状态(默认情况下它在所有渲染器上都处于活动状态),您可以在字形上设置 name attr,然后指定您希望 HoverTool 在哪些名称上处于活动状态:

    p.circle('a', 'b', size=10, name='circle', source=source)
    hover = HoverTool(names=['circle'])
    

    文档:

    http://docs.bokeh.org/en/latest/docs/reference/models/tools.html#bokeh.models.tools.HoverTool.names

    或者您可以将渲染器添加到 HoverTool。

    circle = p.circle('a', 'b', size=10, source=source)
    hover = HoverTool(renderers=['circle'])
    

    文档:

    http://docs.bokeh.org/en/latest/docs/reference/models/tools.html#bokeh.models.tools.HoverTool.renderers

    【讨论】:

    • 谢谢!! names 与散景 v0.12.1 完美配合
    • 在 bokeh 2.2.3 中,renderers 采用实例列表,而不是字符串
    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2022-01-02
    相关资源
    最近更新 更多