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

Bokeh 12.0.15能否创建堆叠分组柱状图?附X轴元组分组尝试代码

Bokeh是否支持堆叠分组柱状图?

当然支持啦!Bokeh完全可以实现堆叠分组柱状图,你用元组组成的FactorRange作为X轴的思路完全可行,下面我结合你的代码示例给出完整的实现方案:

完整可运行示例代码

from bokeh.io import show, output_file
from bokeh.models import ColumnDataSource, HoverTool, FactorRange
from bokeh.plotting import figure

# 你定义的分组X轴因子
factors = [("2017","jan"),("2017","feb"),("2017","mar"), ("2018",'jan'),("2018","feb"),("2018","mar")]
# 补全Jim的数据并整理数据源
data = {
    'factors': factors,
    'Tammy': [2, 1, 4, 3, 2, 4],
    'Jim': [5, 3, 4, 6, 5, 7]
}

# 创建ColumnDataSource
source = ColumnDataSource(data=data)

# 初始化绘图对象,指定X轴为FactorRange
p = figure(x_range=FactorRange(*factors), height=350, title="堆叠分组柱状图",
           toolbar_location=None, tools="")

# 用vbar_stack创建堆叠柱状图
renderers = p.vbar_stack(['Tammy', 'Jim'], x='factors', width=0.9, source=source,
                         color=['#c9d9d3', '#718dbf'], legend_label=['Tammy', 'Jim'])

# 添加Hover工具,鼠标悬停显示详细数据
hover = HoverTool(tooltips=[
    ("年份-月份", "@factors"),
    ("Tammy", "@Tammy"),
    ("Jim", "@Jim"),
    ("总计", "@Tammy + @Jim")
], renderers=renderers)
p.add_tools(hover)

# 优化图表样式
p.y_range.start = 0
p.x_range.range_padding = 0.1
p.xaxis.major_label_orientation = 1  # 让X轴标签倾斜显示,避免重叠
p.xgrid.grid_line_color = None
p.legend.location = "top_left"
p.legend.orientation = "horizontal"

# 输出到HTML文件并展示
output_file("stacked_grouped_bar.html")
show(p)

关键细节说明

  • FactorRange适配分组需求:你定义的元组列表factors完美匹配FactorRange的要求,它会自动识别「年份+月份」的双层分组结构,让X轴呈现清晰的分组效果。
  • vbar_stack实现堆叠逻辑:这个方法是Bokeh专门为堆叠柱状图设计的,第一个参数传入要堆叠的字段列表,就能自动把同一分组下的多个数据系列堆叠起来。
  • 交互体验优化:添加HoverTool后,用户鼠标悬停时能看到每个分组的具体数值和总计,让图表信息更直观。

运行这段代码,你就能得到一个功能完整的堆叠分组柱状图啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:30:01