我对Bokeh中的HoverTool感到有些烦恼。我有一个具有多个数据“列”的ColumnDataSource,并且使用各种列在图形上绘制线。当我将鼠标悬停在直线上的某个点上时,我想显示该直线上该点的“ x”(CDS中的“ rpm”数据)和“ y”(CDS中的其他列之一)数据。
由于所有行都使用相同的CDS(“ y”值的不同列),在我的生命中,我无法弄清楚如何区分悬停的行的“ y”值并显示仅该行的“ y”值。目前,我只是显示所有悬停在其上的“ x”值的“ y”值。
我不想使用'$ y'参数,因为那只是图形上光标的位置,而不是悬停点的数据。
将感谢您的想法。谢谢。
请注意,该程序绘制给定发动机RPM的车速,并且每个系列都是通过变速箱进行的。
import itertools
from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource, HoverTool
from bokeh.palettes import Category20_20 as palette
data={'rpm': range(2000, 4000, 500),
'1st': [15.00040961597459,
18.750512019968237,
22.50061442396188,
26.25071682795553],
'2nd': [28.241511931310182,
35.301889914137725,
42.36226789696527,
49.422645879792825],
'3rd': [45.751249328722494,
57.18906166090312,
68.62687399308373,
80.06468632526436],
'4th': [66.30615844742391,
82.8826980592799,
99.45923767113587,
116.03577728299183]}
cds = ColumnDataSource(data=data)
fig = figure(width=800, height= 600, title='Speed', x_axis_label='RPM', y_axis_label='Speed(mph)')
hovertools= HoverTool(tooltips=[('Gear', '$name'),
('4th', '@4th{0.0}'),
('3rd', '@3rd{0.0}'),
('2nd', '@2nd{0.0}'),
('1st', '@1st{0.0}'),
('RPM', '@rpm')],)
colors = itertools.cycle(palette)
fig.add_tools(hovertools)
for gear in ('1st', '2nd', '3rd', '4th'):
color = colors.__next__()
fig.line(x='rpm',
y=gear,
source=cds,
color=color,
legend=gear + ' gear',
muted_color=color,
muted_alpha=0.2,
line_width=1,
name=gear + ' gear')
fig.circle(x='rpm',
y=gear,
source=cds,
color=color,
legend=gear + ' gear',
muted_color=color,
muted_alpha=0.2,
line_width=1,
name=gear + ' gear')
fig.legend.click_policy = "mute"
fig.legend.background_fill_alpha = 0.5
show(fig)
答案 0 :(得分:2)
您可以使用@$name
查找以$name
作为列名的列的值:
hovertools= HoverTool(tooltips=[('Gear', '$name'),
('data', '@$name{0.0}'),
('RPM', '@rpm')],)
但是请注意,为使此方法起作用,您在字形方法中为name
设置的值必须匹配列名。例如。我必须更改:
for gear in ('1st', '2nd', '3rd', '4th'):
color = colors.__next__()
fig.line(x='rpm',
y=gear,
...
name=gear) # CHANGED to match column name
fig.circle(x='rpm',
y=gear,
...
name=gear) # CHANGED to match column name
这将产生:
请注意,在工具提示的“元组”格式中,第一个标签值不会扩展,因此如果需要,例如每行类似4th gear: <value>
之类的东西,那么您将需要使用Custom Tooltip