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

