You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bokeh绘制MultiIndex分组DataFrame柱状图时x_range报错如何解决

Bokeh绘制MultiIndex分组DataFrame柱状图解决方案

报错根本原因:Bokeh分类轴的取值仅支持字符串或字符串组成的元组,原生MultiIndex的Python元组结构无法被识别,统一转换为字符串格式即可解决。

通用实现代码(适配1-3个分组变量场景)

import pandas as pd
from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource

# 原有数据读取逻辑
data = pd.read_csv('CompanyStructure.csv', index_col = 0)

# 可自定义分组字段,支持1-3个变量动态切换
group_cols = ['hour', 'Code', 'Type']
grouped = data.groupby(by=group_cols).sum().reset_index()

# 核心:生成Bokeh可识别的分类x轴标签
# 按分组字段拼接为唯一字符串,自动适配任意数量的分组变量
grouped['x_label'] = grouped[group_cols].apply(lambda x: '-'.join(map(str, x)), axis=1)

# 构建数据源
source = ColumnDataSource(grouped)

# 初始化画布,x_range直接传入生成的标签列表
p = figure(x_range = source.data['x_label'].tolist(), width=1200, height=500)

# 绘制柱状图
p.vbar(x='x_label', top='Value', source=source, width=0.7)

# 可选优化:倾斜x轴标签避免重叠
p.xaxis.major_label_orientation = 3.14/4

show(p)

动态切换分组的适配说明

如果需要实现交互切换分组变量的效果,仅需要修改group_cols的取值,x_label的生成逻辑无需调整即可自动适配新的分组规则。如需实现分组层级下钻等更复杂的交互,可结合Bokeh的CustomJS回调实现分组逻辑的动态更新。

内容的提问来源于stack exchange,提问作者David Halley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:45:03