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

如何为Matplotlib多分组柱状图设置独立Y轴(不同刻度)

解决Matplotlib双Y轴柱状图刻度适配问题

核心问题是你没有将第二组数据的柱状图绑定到右侧独立Y轴的Axes对象上,导致两组数据共用左侧Y轴刻度,从而让大数值的group2被压缩。以下是可行的实现方案:

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 模拟你的数据(可替换为真实数据)
x_categories = np.arange(5)
group1_data = [12, 18, 15, 22, 27]
group2_data = [950, 2300, 1700, 3100, 2600]

# 创建基础画布与左侧Y轴Axes
fig, ax_left = plt.subplots(figsize=(8, 5))
bar_width = 0.33

# 绘制第一组柱状图(绑定左侧Y轴)
bars_left = ax_left.bar(x_categories - bar_width/2, group1_data, bar_width, 
                        label="Group1", color="#1f77b4")
ax_left.set_ylabel("Group1 度量刻度")
ax_left.set_xlabel("分类")
ax_left.set_xticks(x_categories)
ax_left.set_xticklabels(["类别1", "类别2", "类别3", "类别4", "类别5"])
ax_left.legend(loc="upper left")

# 创建右侧独立Y轴(共享X轴)
ax_right = ax_left.twinx()

# 绘制第二组柱状图(绑定右侧Y轴,调整位置避免重叠)
bars_right = ax_right.bar(x_categories + bar_width/2, group2_data, bar_width, 
                          label="Group2", color="#ff7f0e")
ax_right.set_ylabel("Group2 度量刻度")
ax_right.legend(loc="upper right")

# 自动调整布局,防止标签被截断
plt.tight_layout()
plt.show()

关键实现细节

  • 使用ax_left.twinx()创建与左侧Axes共享X轴的右侧Y轴对象ax_right,这是实现双独立Y轴的核心
  • 绘制第二组柱子时必须通过ax_right.bar()明确绑定到右侧Y轴,确保其刻度完全由右侧轴控制
  • 调整两组柱子的X坐标(x_categories ± bar_width/2),避免两组柱状图重叠遮挡
  • 分别为两个轴设置独立的Y轴标签和图例位置,提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:42:08