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
相关产品推荐
相关产品推荐

