HoverTool用于散景散点图中的多个数据系列

 asfasfdsfd 发布于 2022-12-04 16:44

我有以下小例子脚本使用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()

但后来我松开了第二种颜色的图例条目.

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

谢谢!

马克斯

2 个回答
  • 如果要使用多个悬停工具,则需要添加多个悬停工具,每个工具都配置为不同的渲染器.您可以这样添加它们:

    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))
    

    2022-12-11 02:08 回答
  • 这实际上是master中解决的bug.我修复了这个PR https://github.com/bokeh/bokeh/pull/1511 您可以按照以下说明安装包含修复程序的devel构建:http://bokeh.pydata.org/docs/installation.html#开发人员构建

    此外,您需要修改第一个代码以使用模型而不是第三行中的对象,如下所示:

    import numpy as np
    import bokeh.plotting as bp
    from bokeh.models 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')
    fig.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"}
    bp.show()
    

    希望能帮助到你!

    干杯.

    达米安

    更新以下评论

    2022-12-11 03:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有