我有以下小例子脚本使用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()
但后来我松开了第二种颜色的图例条目.
如何设置能够将鼠标悬停在两个数据集上并查看相应的工具提示?
谢谢!
马克斯
如果要使用多个悬停工具,则需要添加多个悬停工具,每个工具都配置为不同的渲染器.您可以这样添加它们:
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))
这实际上是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()
希望能帮助到你!
干杯.
达米安
更新以下评论