Skip to main content
 首页 » 编程设计

python之不同线条的多个 HoverTools( Bokeh )

2025年05月04日12soundcode

我在 Bokeh 图上有多条线,我希望 HoverTool 显示每条线的值,但使用上一个 stackoverflow 答案中的方法不起作用:

https://stackoverflow.com/a/27549243/3087409

这是该答案的相关代码片段:

fig = bp.figure(tools="reset,hover") 
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"} 

这是我的代码:

from bokeh.models import HoverTool 
from bokeh.plotting import figure 
 
source = ColumnDataSource(data=dict( 
    x = [list of datetimes] 
    wind = [some list] 
    coal = [some other list] 
    ) 
) 
 
hover = HoverTool(mode = "vline") 
 
plot = figure(tools=[hover], toolbar_location=None, 
    x_axis_type='datetime') 
 
plot.line('x', 'wind') 
plot.select(dict(type=HoverTool)).tooltips = {"y":"@wind"} 
plot.line('x', 'coal') 
plot.select(dict(type=HoverTool)).tooltips = {"y":"@coal"} 

据我所知,它等同于我链接到的答案中的代码,但是当我将鼠标悬停在图中时,两个悬停工具框都显示相同的值,wind .

请您参考如下方法:

您需要为每个绘图添加渲染器。检查这个。也不要对两个值使用相同的y 标签 更改名称。

from bokeh.models import HoverTool 
from bokeh.plotting import figure 
 
source = ColumnDataSource(data=df) 
 
plot = figure(x_axis_type='datetime',plot_width=800, plot_height=300) 
 
plot1 =plot.line(x='x',y= 'wind',source=source,color='blue') 
plot.add_tools(HoverTool(renderers=[plot1], tooltips=[('wind',"@wind")],mode='vline')) 
 
plot2 = plot.line(x='x',y= 'coal',source=source,color='red') 
plot.add_tools(HoverTool(renderers=[plot2], tooltips=[("coal","@coal")],mode='vline')) 
 
show(plot) 

输出看起来像这样。