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

如何在Python Matplotlib子图内添加标注字母用于图注说明

在Matplotlib子图中添加字母标注的解决方法

我明白你想给每个Matplotlib子图加个字母标注(比如a、b、c这类),方便后续撰写图注但尝试没效果的问题,咱们来一步步解决它~

核心解决思路:用子图对象的text()方法

你之前的代码已经获取了子图对象ax1,接下来只需要在这个子图上调用text()方法,使用子图自身的相对坐标系统,就能让标注固定在子图的指定位置(比如左上角、右上角),不会因为数据范围变化而跑位。

结合你的代码修改示例

下面是适配你现有代码的修改版,我会在第一个子图里添加标注,你可以照着这个逻辑给其他6个子图也加上:

fname='SHOT_'+str(shot)
plt.figure(fname)
ftitle='Time Traces - '+str(nshot[i])
plt.suptitle(ftitle, fontsize=11)

# PLOT 1
ax1 = plt.subplot(711)
plt.scatter(timetraces['Time_LID3'], savitzky_golay(np.array(timetraces['KG1V/LID3']), 17, 1),color='red', label="KG1V",s=10)
# 在这里添加子图标注:字母'a'放在子图左上角
ax1.text(
    0.05, 0.95,  # 相对坐标:x=子图宽度5%的位置,y=子图高度95%的位置
    'a', 
    transform=ax1.transAxes,  # 关键:使用子图自身的坐标系统,而非数据坐标
    fontweight='bold',  # 加粗让标注更醒目
    va='top',  # 垂直对齐顶部,避免和子图边框重叠
    fontsize=12
)
# 你的其他代码(比如fxlabel设置等)
plt.xlabel('Time...')

# 后续子图示例(比如第二个子图标'b')
ax2 = plt.subplot(712)
# 你的绘图代码...
ax2.text(0.05, 0.95, 'b', transform=ax2.transAxes, fontweight='bold', va='top', fontsize=12)

为什么之前的尝试可能没效果?

  • 你可能用了plt.text()而非子图对象的ax.text():plt.text()默认用的是整个画布的坐标,很容易把标注放到子图外面;
  • 用了数据坐标而非相对坐标:如果直接给数据范围内的x/y值,当数据变化时标注位置会乱,甚至被曲线挡住;
  • 坐标值设置不合理:比如y值设得太高超出子图范围,导致标注看不见。

可选调整:改变标注位置

如果想把标注放在右上角,只需要把x坐标改成0.95,并设置水平对齐为右:

ax1.text(
    0.95, 0.95, 
    'a', 
    transform=ax1.transAxes, 
    fontweight='bold', 
    va='top',
    ha='right',  # 水平对齐右侧
    fontsize=12
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:26:07