如何在matplotlib图表中添加y轴次级标签
matplotlib y轴添加次级标签实现方案
你需要的y轴次级标签参考效果如下:
实现方法
方法1:手动标注(适配自定义分类分组场景)
这种方式灵活度最高,可任意自定义标签的分组规则、样式、位置,适合非数值映射的次级标签需求。
完整代码示例:
import matplotlib.pyplot as plt import numpy as np # 生成示例数据 x = np.arange(5) y = np.random.randint(1, 20, size=5) # 绘制基础图表 fig, ax = plt.subplots(figsize=(6, 4)) ax.bar(x, y) # 主y轴基础设置 ax.set_ylim(0, 20) ax.set_ylabel('主标签:数值') # 配置次级标签内容与对应区间 secondary_labels = ['低区间', '中区间', '高区间'] label_ranges = [(0, 6), (7, 13), (14, 20)] # 批量添加次级标签 for label, (y_min, y_max) in zip(secondary_labels, label_ranges): ax.text( # x坐标小于0代表在y轴外侧,可根据实际效果调整数值 x=-0.15, # y坐标取区间中点位置 y=(y_min + y_max)/2, s=label, # 绑定y轴坐标系,避免随x轴范围变化偏移 transform=ax.get_yaxis_transform(), ha='center', va='center', # 纵向排列标签 rotation=90, fontweight='bold', color='gray' ) # 调整左侧边距,避免标签被截断 plt.subplots_adjust(left=0.2) plt.show()
方法2:secondary_yaxis接口(适配数值映射场景)
如果次级标签是主标签的线性映射(比如单位换算),可以直接用matplotlib内置的次级轴接口,会自动同步主轴的缩放、刻度变化。
完整代码示例:
import matplotlib.pyplot as plt import numpy as np # 生成示例数据 x = np.arange(5) y = np.random.randint(1, 20, size=5) # 绘制基础图表 fig, ax = plt.subplots(figsize=(6, 4)) ax.bar(x, y) ax.set_ylabel('主单位:厘米') # 定义主单位到次级单位的双向换算函数 def cm_to_inch(x): return x / 2.54 def inch_to_cm(x): return x * 2.54 # 创建左侧次级y轴 sec_ax = ax.secondary_yaxis('left', functions=(cm_to_inch, inch_to_cm)) # 调整labelpad避免和主标签重叠 sec_ax.set_ylabel('次级单位:英寸', labelpad=30) # 调整左侧边距 plt.subplots_adjust(left=0.2) plt.show()
注意事项
- 手动标注时如果标签位置偏移或重叠,可调整
text方法的x坐标、subplots_adjust的left参数预留更多左侧空间 - 数值映射场景使用
secondary_yaxis时,必须传入双向换算函数,否则次级轴刻度无法正常生成 - 次级标签的样式(颜色、字号、字重)可根据需求自定义修改对应参数即可
内容的提问来源于stack exchange,提问作者Makcim Matveev
相关产品推荐
相关产品推荐

