matplotlib实现多行x轴标签:分区间标注趋势并调整主x轴标签位置
实现方案
完全通过matplotlib原生的次要刻度功能完成布局,不需要调用ax.text()手动放置文本,代码简洁且样式统一:
- 位置匹配:
Increasing需要在x=0、x=1的正下方居中,对应中心x坐标为0.5;Decreasing在x=3正下方居中,直接取x=3作为锚点 - 样式统一:将上述两个锚点设为x轴的次要刻度并挂载对应文本,标签会自动继承默认的轴文本样式,和原有“x”标签的视觉效果完全一致
- 层级调整:通过参数增大主x轴标签的底部留白,让“x”标签落到两个区间标注的下方,形成清晰的垂直分层
完整运行代码
import matplotlib.pyplot as plt import numpy as np x = np.arange(-1, 5) y = 6 - np.square(x - 1) fig, ax = plt.subplots() ax.plot(x, y, 'b') ax.scatter(x, y, color='m', zorder=10) ax.set_ylabel('y') # 配置区间标注的锚点位置 minor_label_pos = [0.5, 3] minor_label_text = ['Increasing', 'Decreasing'] # 将锚点设为x轴次要刻度,挂载对应文本 ax.set_xticks(minor_label_pos, minor=True) ax.set_xticklabels(minor_label_text, minor=True) # 隐藏次要刻度的刻度线,仅保留文本 ax.tick_params(axis='x', which='minor', length=0) # 下移主x轴标签,使其位于区间标注下方 ax.set_xlabel('x', labelpad=30) plt.show()
最终布局效果
x轴区域从上到下形成三级排布:
- 原有主刻度的数值标签
- 对应锚点位置的“Increasing”“Decreasing”文本
- 最下方的主x轴标签“x”
全程无手动坐标计算,不会出现标注偏移、样式不统一的问题。
内容的提问来源于stack exchange,提问作者Forklift17
相关产品推荐
相关产品推荐

