我修改了官方散景使用指南页面上提供的multi_line绘图示例,以添加带有工具提示的HoverTool。 (Usage guide example)
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, HoverTool
output_file("patch.html")
plot_data=dict(
xs=[[1, 3, 2], [3, 4, 6, 6]],
ys=[[2, 1, 4], [4, 7, 8, 5]],
colors=["firebrick", "navy"],
alphas=[0.8, 0.3])
hover=HoverTool(tooltips=[
('X-Coordinate','@xs'),
('Y-Coordinate','@ys')])
dsource = ColumnDataSource(plot_data)
p = figure(plot_width=400, plot_height=400, tools=[hover, 'wheel_zoom', ])
p.multi_line('xs', 'ys', color='colors', alpha='alphas', line_width=4,
source=dsource)
show(p)
我希望工具提示显示悬停指针的点(x)附近的x和y坐标。但是,工具提示包含指针悬停的所有线点的x和y坐标。
是否有某种方式/选项埋藏在某处(我试图很难找到它)使HoverTool工具显示单点的坐标?
P.S。 - 我知道$ x,$ y和$ sx,$ sy可以分别用于显示屏幕和画布x,y坐标,但在我的情况下,x轴也可以是日期时间轴,在这种情况下我想要工具提示中的一个日期而不是所有日期。
答案 0 :(得分:1)
制作一条不可见的行,并将其设置为hover.renderers
:
import numpy as np
from itertools import chain
nan = itertools.repeat([np.nan])
xs, ys = (np.concatenate(list(chain(*zip(plot_data[name], nan)))) for name in ["xs", "ys"])
dsource2 = ColumnDataSource(dict(xs=xs, ys=ys))
line = p.line('xs', 'ys', source=dsource2, alpha=0)
hover.renderers = [line]
答案 1 :(得分:0)
使用完整代码发布答案,包括HYRY提供的解决方案:
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, HoverTool
import numpy as np
import itertools
from itertools import chain
output_file("patch.html")
plot_data=dict(
xs=[[1, 3, 2], [3, 4, 6, 6]],
ys=[[2, 1, 4], [4, 7, 8, 5]],
colors=["firebrick", "navy"],
alphas=[0.8, 0.3])
hover=HoverTool()
dsource = ColumnDataSource(plot_data)
p = figure(plot_width=400, plot_height=400, tools=[hover, 'wheel_zoom', ])
p.multi_line('xs', 'ys', color='colors', alpha='alphas', line_width=4, source=dsource)
nan = itertools.repeat([np.nan])
xs, ys = (np.concatenate(list(chain(*zip(plot_data[name], nan)))) for name in ["xs", "ys"])
dsource2 = ColumnDataSource(dict(xs=xs, ys=ys))
line = p.line('xs', 'ys', source=dsource2, color='white', line_width=1, alpha=1)
hover.renderers = [line]
show(p)