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

使用Bokeh实现嵌套柱状图时触发ValueError错误求助

解决Bokeh嵌套柱状图的FactorRange错误

嘿,我刚帮你排查了问题,你遇到的这个ValueError完全是因为生成x轴分类的逻辑出了问题——Bokeh的FactorRange要求的是一系列具体的分类组合元组,但你现在的代码把整个请求类型列表和状态列表直接塞进了元组里,这肯定不符合要求。

先看你原来的x生成代码:

x=[(jobemergence,jobstatus)for job in jobemergence for stat in jobstatus]

这会生成一堆像([所有请求类型], [所有状态])的重复元组,而Bokeh需要的是类似('Access Cards/ FOBs/ Keys', 'Open')、('Access Cards/ FOBs/ Keys', 'In Progress')这种每个请求类型和状态一一配对的元组。

下面是完整的修正代码,我标注了关键的修改点:

from bokeh.io import output_file, show
from bokeh.models import ColumnDataSource, FactorRange
from bokeh.plotting import figure
from bokeh.transform import factor_cmap
from bokeh.palettes import Spectral3

def visualEmergence():
    # 给输出文件加上.html后缀,方便定位
    output_file("EmergencyOverview.html")  
    jobemergence=['Access Cards/ FOBs/ Keys','Plumbing','QR Demo Request Type','Demo Request Type','Other','ThisRequestType1']
    jobstatus=['Open','In Progress','Completed']
    
    graphdata={
        'jobemergence':jobemergence,
        'Open':[4,3,0,4,0,1],
        'In Progress':[2,1,2,4,0,0],
        'Completed':[1,1,1,1,1,0]
    }
    
    # 关键修正:生成每个请求类型+状态的配对元组
    x = [(job, stat) for job in jobemergence for stat in jobstatus]
    stackvalue = sum(zip(graphdata['Open'], graphdata['In Progress'], graphdata['Completed']), ())
    source = ColumnDataSource(data=dict(x=x, count=stackvalue))
    
    plot = figure(x_range=FactorRange(*x), plot_height=250, title='Emergency Request Overview')
    # 修正top参数为数据源里的count字段,同时调整颜色映射的参数
    plot.vbar(x='x', top='count', width=0.9, source=source, 
              line_color="white", 
              fill_color=factor_cmap('x', palette=Spectral3, factors=jobstatus, start=1, end=2))
    
    plot.y_range.start=0
    plot.x_range.range_padding=0.1
    plot.xaxis.major_label_orientation=1
    plot.xaxis.grid_line_color=None
    
    show(plot)

# 别忘了调用函数
visualEmergence()

再给你梳理几个核心的修正细节:

  • x轴分类修正:用(job, stat)生成具体的分类组合,这才是FactorRange能识别的格式。
  • 颜色映射调整:因为现在x是二元组,我们要基于元组的第二个元素(状态)来配色,所以start=1、end=2,同时换成Spectral3调色板(刚好匹配3种状态)。
  • vbar参数修正:原来的top='stackvalue'写错了,应该对应数据源里的count字段。
  • 文件后缀补充:给output_file加上.html后缀,避免生成无后缀的文件不好打开。

运行修正后的代码就能正常生成嵌套柱状图啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:01:25