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

如何转换Pandas DataFrame并解决Bokeh堆叠柱状图报错问题?

解决Bokeh vbar_stack的ValueError问题

错误原因

你遇到的ValueError核心原因是:vbar_stack方法要求color、legend_label这类序列型参数的长度,必须和stackers参数的长度完全一致。你的代码中providers是5个(透视表生成的5个provider列),但color只传了2个颜色,长度不匹配导致广播失败。

解决方案

只需让color和legend_label的长度与stackers(即providers)的长度保持一致即可,推荐用Bokeh内置调色板快速生成对应长度的颜色列表:

修改后的完整代码

# 导入需要的模块
from bokeh.palettes import Spectral5
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure

# 透视表逻辑保持不变
pivot_df = grouped_df.pivot_table(index=['date'], columns='provider', values='num_youths', aggfunc='first', fill_value=0)
pivot_df.reset_index(inplace=True)
source = ColumnDataSource(pivot_df)
providers = pivot_df.columns[1:]

# 创建图表,x_range直接用去重后的date列即可
p = figure(x_range=pivot_df['date'], plot_height=350, title="每月各资助方帮扶青年人数",
           toolbar_location=None, tools="")

# 使用与providers长度匹配的调色板(Spectral5对应5个provider)
p.vbar_stack(stackers=providers, x='date', width=0.9, color=Spectral5, source=source,
             legend_label=providers)

# 可选:调整图例位置提升可读性
p.legend.location = "top_left"

手动定义颜色的替代方案

如果不想用内置调色板,也可以手动定义和providers长度一致的颜色列表:

colors = ["blue", "red", "green", "orange", "purple"] # 5个颜色对应5个provider
p.vbar_stack(stackers=providers, x='date', width=0.9, color=colors, source=source, legend_label=providers)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:10:02