【问题标题】:HoverTool for multiple data series in bokeh scatter plot散景散点图中多个数据系列的悬停工具
【发布时间】:2015-02-17 04:43:22
【问题描述】:

我有以下使用 numpy 和 bokeh 的小示例脚本:

import numpy as np
import bokeh.plotting as bp
from bokeh.objects import HoverTool 
bp.output_file('test.html')

fig = bp.figure(tools="reset,hover")
x = np.linspace(0,2*np.pi)
y1 = np.sin(x)
y2 = np.cos(x)
s1 = fig.scatter(x=x,y=y1,color='#0000ff',size=10,legend='sine')
s1.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"}
s2 = fig.scatter(x=x,y=y2,color='#ff0000',size=10,legend='cosine')
s2.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"}
bp.show()

问题在于悬停工具仅适用于余弦曲线,不适用于正弦曲线。

我知道一种选择是将两个系列绘制在一起并更改余弦数据点的颜色:

import numpy as np
import bokeh.plotting as bp
from bokeh.objects import HoverTool 
bp.output_file('test.html')

fig = bp.figure(tools="reset,hover")
x = np.linspace(0,2*np.pi)

y1 = np.sin(x)
y2 = np.cos(x)

x = np.array([x,x]).flatten()
y = np.array([y1,y2]).flatten()

blue = np.array('#0000ff').flatten()
red = np.array('#ff0000').flatten()
colors = np.array([blue.repeat(len(y1)),red.repeat(len(y1))]).flatten()

s1 = fig.scatter(x=x,y=y,color=colors,size=10,legend='sine & cosine')
s1.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"}
bp.show()

但后来我失去了第二种颜色的图例条目。

如何才能将鼠标悬停在两个数据集上并查看相应的工具提示?

谢谢!

最大

【问题讨论】:

    标签: python bokeh


    【解决方案1】:

    编辑:请注意,仅当您希望为不同的字形提供不同的工具提示时,才需要使用以下方法。如果您希望所有字形都使用相同的工具提示,请参阅上面的答案。


    如果您想拥有多个悬停工具,则需要添加多个悬停工具,每个工具都针对不同的渲染器进行配置。你可以这样添加它们:

    p = figure()
    
    r1 = p.circle([1,2,3], [4,5,6], color="blue")
    p.add_tools(HoverTool(renderers=[r1], tooltips=TIPS))
    
    r2 = p.square([4,5,6], [1,2,3], color="red")
    p.add_tools(HoverTool(renderers=[r2], tooltips=TIPS))
    

    【讨论】:

    • 这应该被添加到接受的答案中。这是(无论如何现在)为每个绘图而不是每个图形设置不同的悬停渲染器的正确方法。
    • 然而,这会导致绘图有两个不同的“悬停”图标。有没有办法统一这一点(例如,有一个图标来切换两者)?或者,是否可以将“悬停”按钮重命名为更明确的名称?
    • 这仍然是一个悬而未决的问题:github.com/bokeh/bokeh/issues/5497如果你有能力,请考虑帮助和贡献。
    【解决方案2】:

    最初的答案是古老而过时的,这里是如何使用任何现代版本的散景来实现这一点:

    from bokeh.plotting import figure, show
    import numpy as np
    
    x = np.linspace(0, 2*np.pi)
    y1 = np.sin(x)
    y2 = np.cos(x)
    
    fig = figure(tools="reset", tooltips=[("x", "$x"), ("y", "$y")])
    s1 = fig.scatter(x, y1, color='#0000ff', size=10, legend_label='sine')
    s2 = fig.scatter(x, y2, color='#ff0000', size=10, legend_label='cosine')
    
    show(fig)
    

    【讨论】:

    • 非常感谢!像魅力一样工作!
    • 我收到此错误:AttributeError: 'generator' object has no attribute 'tooltips'。我使用以下命令更新了散景: pip install --pre -i pypi.anaconda.org/bokeh/channel/dev/simple bokeh --extra-index-url pypi.python.org/simple
    • 0.10 上与 Hamid 相同的问题
    • 工具在上:需要做的:fig.select(HoverTool)
    • AttributeError: 'generator' object has no attribute 'tooltips'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多