Bokeh多线条图表HoverTool异常:多工具框显示同一数值求助
解决Bokeh多线条HoverTool显示重复数值的问题
我之前也碰到过一模一样的坑!核心问题大概率是你没给每个HoverTool指定专属的线条渲染器,导致两个工具都默认绑定了同一条线,自然显示重复的数值。下面给你一套靠谱的实现方案,附详细解释:
关键思路
每个线条在Bokeh里对应一个GlyphRenderer对象,你需要给每个HoverTool明确指定它要作用的渲染器,同时确保tooltips里的字段和线条绑定的数据源字段严格对应。
完整示例代码
from bokeh.plotting import figure, show from bokeh.models import ColumnDataSource, HoverTool import pandas as pd import numpy as np # 1. 构造示例数据(替换成你的真实数据) dates = pd.date_range(start='2024-01-01', periods=10) wind_data = np.random.randint(5, 20, size=10) temp_data = np.random.randint(10, 30, size=10) # 可以用同一个数据源,也可以给每条线单独建数据源 source = ColumnDataSource(data={ 'date': dates, 'wind': wind_data, 'temperature': temp_data }) # 2. 创建画布,注意先清空默认tools避免冲突 p = figure(x_axis_type='datetime', title='Weather Data', tools='') # 3. 绘制每条线,并保存对应的渲染器对象!这一步是核心 wind_line = p.line(x='date', y='wind', source=source, color='blue', legend_label='Wind Speed') temp_line = p.line(x='date', y='temperature', source=source, color='red', legend_label='Temperature') # 4. 为每条线创建专属HoverTool,指定renderers参数绑定对应线条 # 风速的HoverTool,只作用于wind_line wind_hover = HoverTool( renderers=[wind_line], # 关键:限定工具作用的线条 tooltips=[ ('日期', '@date{%Y-%m-%d}'), ('风速', '@wind mph') ], formatters={'@date': 'datetime'} # 格式化日期显示 ) # 温度的HoverTool,只作用于temp_line temp_hover = HoverTool( renderers=[temp_line], tooltips=[ ('日期', '@date{%Y-%m-%d}'), ('温度', '@temperature °C') ], formatters={'@date': 'datetime'} ) # 5. 将两个HoverTool添加到画布 p.add_tools(wind_hover, temp_hover) # 显示图表 show(p)
你可能踩的坑
- 没保存线条渲染器:如果直接写
p.line(...)而不把返回值存成变量,就没法给HoverTool指定renderers,导致所有HoverTool都作用于所有线条。 - 未指定renderers参数:默认情况下HoverTool会作用于所有渲染器,所以两个工具都会抓取同一段数据。
- 数据源字段不匹配:检查tooltips里的
@xxx是否和数据源里的字段名完全一致,大小写也要严格对应!
内容的提问来源于stack exchange,提问作者thosphor
相关产品推荐
相关产品推荐

