Bokeh vbar悬停工具问题:多数据非堆叠柱状图悬停显示最大值
解决Bokeh多数据非堆叠柱状图悬停显示最大值的问题
我懂你现在的困扰啦——用Bokeh做多数据非堆叠柱状图时,想让鼠标悬停在柱子上显示对应分组的最大值,但不知道怎么把悬停位置和数据索引关联起来。别担心,咱们一步步来搞定这个问题!
核心思路
问题的关键在于:要把每个柱子需要显示的最大值提前存入数据源(ColumnDataSource),这样HoverTool就能直接通过字段引用获取对应的值,不需要动态去索引计算。下面是完整的修改示例代码,我会帮你拆解关键步骤:
from bokeh.io import show, output_file from bokeh.models import ColumnDataSource, FactorRange, HoverTool from bokeh.plotting import figure output_file("bars.html") # 定义你的位置和类别(补全你没写完的部分) LOCATIONS = ['CPC','OG2','HS82'] CATEGORIES = ['类别1', '类别2', '类别3'] # 模拟你的原始数据:每个位置+类别对应的数值 raw_data = { 'locations': [loc for loc in LOCATIONS for _ in CATEGORIES], 'categories': [cat for _ in LOCATIONS for cat in CATEGORIES], 'values': [12, 18, 9, 15, 11, 20, 8, 14, 16] } # 第一步:计算每个位置的最大值(如果要类别最大值,逻辑类似) location_max_values = {} for loc in LOCATIONS: # 筛选当前位置的所有数值,取最大值 loc_data = [v for l, v in zip(raw_data['locations'], raw_data['values']) if l == loc] location_max_values[loc] = max(loc_data) # 把最大值加入原始数据,每个柱子对应所属位置的最大值 raw_data['group_max'] = [location_max_values[loc] for loc in raw_data['locations']] # 第二步:构建FactorRange需要的x轴元组(位置+类别) x_axis = list(zip(raw_data['locations'], raw_data['categories'])) source = ColumnDataSource(data=raw_data) # 创建图表 p = figure( x_range=FactorRange(*x_axis), height=350, title="多数据非堆叠柱状图", toolbar_location="right" ) # 绘制柱状图,x轴绑定我们构建的x_axis字段 p.vbar(x='x', top='values', width=0.8, source=source) # 第三步:配置HoverTool,直接引用数据源里的字段 hover_tool = HoverTool( tooltips=[ ('位置', '@locations'), ('类别', '@categories'), ('当前数值', '@values'), ('该位置最大值', '@group_max') ], # 只在柱子上触发悬停 mode='vline' ) p.add_tools(hover_tool) # 优化x轴标签显示 p.xaxis.major_label_orientation = 1.2 p.y_range.start = 0 show(p)
关键步骤拆解
给数据源补充最大值字段:
我们先遍历每个位置,计算出该位置的最大值,然后把这个值对应到每一行数据中。这样每个柱子的数据源行里都包含了所属分组的最大值,HoverTool可以直接读取。正确绑定FactorRange的x轴:
用zip把位置和类别组合成元组,作为x轴的刻度,同时把这个元组列表作为数据源的x字段,确保每个柱子和x轴刻度一一对应,不会出现索引错位。配置HoverTool:
通过@字段名的方式直接引用数据源里的字段,这样鼠标悬停时,Bokeh会自动匹配当前柱子对应的行数据,显示你需要的所有信息。如果需要显示类别级别的最大值,只需要修改计算最大值的逻辑(遍历类别而非位置)即可。
这样调整后,鼠标悬停在任意柱子上,就能准确显示该柱子所属分组的最大值啦!
内容的提问来源于stack exchange,提问作者withayk
相关产品推荐
相关产品推荐

