如何在Plotly Python中制作带次坐标轴的分组柱状图(barmode=group)?
带次坐标轴的分组柱状图实现方案
要解决柱状图重叠的问题,核心是开启分组显示模式并确保两组数据的x轴类别匹配,具体实现如下:
- 统一x轴类别:若两组x轴数据存在差异,需合并为完整的类别列表,对应缺失数据补0,保证两组x轴完全对齐
- 设置
barmode='group':在布局中开启分组显示,让同类别下的柱状图并列排布 - 绑定主次坐标轴:分别将两个柱状图系列关联到主、次坐标轴
完整代码示例
import plotly.graph_objects as go from plotly.subplots import make_subplots # 示例数据(x轴类别统一) x = ['类别A', '类别B', '类别C', '类别D'] y_main = [12, 28, 18, 32] y_secondary = [95, 160, 130, 190] # 创建带次坐标轴的子图 fig = make_subplots(specs=[[{'secondary_y': True}]]) # 添加主坐标轴柱状图 fig.add_trace( go.Bar(x=x, y=y_main, name='主轴系列'), secondary_y=False ) # 添加次坐标轴柱状图 fig.add_trace( go.Bar(x=x, y=y_secondary, name='次轴系列'), secondary_y=True ) # 开启分组显示(关键设置) fig.update_layout(barmode='group') # 配置坐标轴标签 fig.update_xaxes(title_text='分类') fig.update_yaxes(title_text='主轴数值', secondary_y=False) fig.update_yaxes(title_text='次轴数值', secondary_y=True) fig.show()
处理x轴数据不一致的情况
如果两组x轴类别不完全相同,需先整理数据:
# 原始差异数据 x1 = ['类别A', '类别B'] y1 = [12, 28] x2 = ['类别B', '类别C'] y2 = [160, 130] # 合并为完整x轴类别 x_full = list(set(x1 + x2)) x_full.sort() # 保持类别顺序 # 补全对应y值 y1_full = [y1[x1.index(c)] if c in x1 else 0 for c in x_full] y2_full = [y2[x2.index(c)] if c in x2 else 0 for c in x_full] # 后续使用x_full、y1_full、y2_full执行上述完整代码即可
内容的提问来源于stack exchange,提问作者evan54
相关产品推荐
相关产品推荐

