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

如何将Matplotlib子图的科学计数法偏移量移至顶部轴线下方

解决Matplotlib堆叠子图中Y轴科学计数法偏移量重叠问题

在绘制3行1列、共享X轴的堆叠子图时,Y轴的科学计数法偏移量会与上方子图的内容重叠。手动设置偏移文本位置的操作会在绘图后被Matplotlib自动重置,导致设置无效。

可行解决方案

  • 调整偏移文本垂直对齐方式:将Y轴偏移文本的垂直对齐设为top,让它固定在Y轴标签上方,避开子图数据区域。
  • 绘图后再自定义位置:由于Matplotlib在绘图过程中会重新计算元素布局,需在完成绘图(调用plt.draw())后再手动调整偏移文本位置,确保设置生效。

修改后的完整代码

from matplotlib import pyplot as plt
from numpy import linspace, sqrt, pi

fig, ax = plt.subplots(3, 1, sharex=True)
plt.subplots_adjust(hspace=0)

def zr(w0, l):
    return pi*w0**2/l

def w0(l, L, R):
    return sqrt(l/pi * sqrt(L*(R-L)))

def width(z, l):
    return w0(l, 0.55, 1) * sqrt(1 + (z / zr(w0(l, 0.55, 1), l))**2)

x = linspace(0, 1, 5)
y = width(x, 5.54e-6)

for i in range(3):
    ax[i].set_xlabel("z / m")
    ax[i].set_ylabel("$d(w)$ / mm")
    ax[i].ticklabel_format(axis='y', style='sci', scilimits=(0, 0)) 
    ax[i].grid("both", linestyle=":")
    # 方案1:设置偏移文本垂直对齐到顶部
    ax[i].yaxis.offsetText.set_va('top')

ax[1].errorbar(x, y, xerr = 0.025, yerr = 0.2*1e-3, color = "black", linestyle = "")

# 方案2:如需更精准的位置控制,绘图后再设置
plt.draw()
for axis in fig.axes:
    axis.yaxis.offsetText.set_position((-0.1, 1.02))

plt.show()

说明

  • 方案1操作简单,能解决绝大多数重叠场景;
  • 方案2适合需要自定义偏移文本位置的需求,必须在plt.draw()之后执行,才能覆盖Matplotlib自动计算的位置。

内容的提问来源于stack exchange,提问作者David K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:32:37