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

如何在Bokeh双Y轴Vbar图中实现两组条形并列显示

解决Bokeh双Y轴条形图重叠问题

要让两组条形按月度并列显示,核心是给两组条形的X坐标分别加/减偏移量,让它们错开分布在刻度两侧。具体操作如下:

修改步骤

  1. 生成偏移后的X坐标:Bokeh的分类X轴会把每个月份映射为0、1、2...这样的整数索引,给第一组条形的X坐标减去固定偏移,第二组加上偏移,就能实现左右并列。
  2. 调整条形宽度:确保两组条形的总宽度不超过1(避免相邻月份的条形互相挤压),比如每组宽度设为0.4,偏移量设为0.2(刚好是宽度的一半,让条形对称分布在刻度两侧)。

修改后的完整代码

from bokeh.models import Range1d, LinearAxis
from bokeh.plotting import figure

# 假设months、dataP、dataI、title已提前定义
p = figure(title=title, plot_width=1000, plot_height=350,
           x_range=months, y_range=(0, max(dataP) * 1.2),
           tools="box_zoom, pan, reset, hover, save", active_drag='box_zoom')

# 定义偏移量和条形宽度
offset = 0.2
bar_width = 0.4

# 第一组条形:X坐标左移偏移量
p.yaxis.axis_label = 'dataP label'
p.vbar(x=[i - offset for i in range(len(months))], 
       top=dataP, color='blue', width=bar_width)

# 第二组条形:X坐标右移偏移量
p.extra_y_ranges = {"foo": Range1d(start=0, end=max(dataI) * 1.2)}
p.vbar(x=[i + offset for i in range(len(months))], 
       top=dataI, color="red", y_range_name="foo", width=bar_width)

p.add_layout(LinearAxis(y_range_name="foo", axis_label="dataI label"), 'right')

注意事项

  • 偏移量和宽度要匹配:比如宽度设为0.4,偏移量设为0.2,这样两个条形刚好对称分布在刻度两侧,且总宽度0.8小于1,不会和相邻月份的条形重叠。
  • 如果需要更宽的条形,可以适当调整宽度(比如0.45)和偏移量(0.225),只要总宽度≤1即可。

内容的提问来源于stack exchange,提问作者Sara.SP92

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:01:07