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

