如何在matplotlib子图左上角添加不受参数影响的固定位置标签
Matplotlib子图固定左上角标签稳定实现方案
核心解决思路是使用点单位的固定偏移替代相对坐标偏移,搭配子图轴坐标锚定,完全不受子图宽高比、绘图数据、轴标签/子图标题的影响。
实现代码
import matplotlib.pyplot as plt from matplotlib.transforms import ScaledTranslation # 封装统一的标签添加函数 def add_subplot_label(ax, label, left_offset=5): """ ax: 子图对象 label: 标签内容,如"(a)" left_offset: 标签相对子图左上角向左偏移的点数(1点=1/72英寸),正数向左偏移 """ # 水平偏移使用点单位,固定偏移距离,不受子图宽高比影响 transform = ax.transAxes + ScaledTranslation(-left_offset/72, 0, fig.dpi_scale_trans) ax.text( 0, 1, label, ha="right", va="top", # 文本右上角对齐锚点(0,1),刚好贴合子图左上角 transform=transform, fontsize="medium" ) # 绘图示例 fig, axes = plt.subplots(ncols=2, constrained_layout=True) ax = axes[0] ax.plot([0, 1], [0, 1]) ax.set_xlabel("x") ax.set_ylabel("y") ax.set_title("子图1标题") # 即使添加标题,标签位置也不受影响 add_subplot_label(ax, "(a)") ax = axes[1] ax.plot([0, 1], [0, 1]) ax.set_xlabel("x") ax.set_ylabel("y") add_subplot_label(ax, "(b)") plt.show()
如果需要把标签放在子图内部左上角,直接去掉偏移、设置ha="left"即可,无需其他调整。
方案优势
- 水平偏移采用物理点单位,无论子图宽高比如何变化,偏移距离固定,无需手动调整相对坐标参数
- 垂直位置锚定子图轴坐标的顶部(0,1),无论是否添加子图标题、坐标轴标签,都能始终对齐子图坐标轴的左上角
- 只需调整
left_offset参数即可统一修改所有子图标签的偏移距离,适配不同排版需求
内容的提问来源于stack exchange,提问作者Tom de Geus
相关产品推荐
相关产品推荐

