Bokeh中HoverTool提示框无法显示样本ID问题求助
解决Bokeh UMAP绘图HoverTool显示样本ID的问题
核心问题是你没把DataFrame的索引(样本ID)传入ColumnDataSource——默认情况下数据源不会自动包含索引列,所以HoverTool找不到对应字段才显示"???"。按下面步骤来:
1. 先把DataFrame索引转为普通列
把你的索引提取成单独的列,比如命名为sample_id:
# 假设你的DataFrame叫df,UMAP结果存在df['umap_x']和df['umap_y']里 df['sample_id'] = df.index
2. 正确构建ColumnDataSource
确保数据源包含UMAP坐标和样本ID列:
from bokeh.models import ColumnDataSource source = ColumnDataSource(data={ 'x': df['umap_x'], 'y': df['umap_y'], 'sample_id': df['sample_id'] })
3. 配置HoverTool并关联字段
指定HoverTool要显示的字段,注意字段名要和数据源里的完全一致:
from bokeh.models import HoverTool from bokeh.plotting import figure, show p = figure(title="UMAP 可视化", tools="pan,box_zoom,reset,hover") p.circle(x='x', y='y', source=source, size=8) # 配置HoverTool hover = p.select_one(HoverTool) hover.tooltips = [ ("样本ID", "@sample_id"), ("UMAP坐标", "(@x, @y)") ] show(p)
常见报错排查
- 如果用ColumnDataSource时报错,大概率是数据源里的字段名和绘图时引用的不一致,检查拼写和大小写
- 确保
sample_id列的类型是字符串或可显示的数值类型,不要有缺失值
内容的提问来源于stack exchange,提问作者Matteo
相关产品推荐
相关产品推荐

