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

