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

如何水平对齐X轴标签?解决X轴0标签位置偏高问题

问题描述

绘制3×3子图时,X轴的0标签位置明显高于其他标签,希望让它和其他X轴标签处于同一水平高度。关键绘图代码及字体配置如下:

关键绘图代码

for i, h3 in enumerate(np.linspace(-0.1, 0.1, 3)):
    for j, h4 in enumerate(np.linspace(-0.1, 0.1, 3)):
        gh_params[3] = h3
        gh_params[4] = h4
        gauss_vals = gauss(x, *gauss_params)
        gh_vals = gauss_hermite(x, *gh_params)
        gausshermite_color = 'mediumblue'
        gauss_color = 'darkorange'
        axs[i, j].plot(x, gh_vals, color=gausshermite_color, linewidth=0.6, label=r'$\mathscr{L}_{GH}$')
        axs[i,j].plot(x, gauss_vals, color=gauss_color, linewidth=0.6, label=r'$\mathscr{L}_G$')
        axs[i,j].set_xlim([-5*sigma, 5*sigma])
        axs[i,j].set_ylim([-0.1, 1.4*np.max(gauss_vals)])

        # 调整轴刻度
        axs[i,j].xaxis.set_major_locator(MultipleLocator(2))
        axs[i,j].yaxis.set_major_locator(MultipleLocator(0.2))
        axs[i,j].xaxis.set_minor_locator(MultipleLocator(2/3))
        axs[i,j].yaxis.set_minor_locator(MultipleLocator(0.2/3))
        axs[i,j].tick_params(axis='both', which='both', labeltop=False, direction='in', length=2, width=0.2,
                       bottom=True, top=True, labelbottom=True, left=True, right=True, labelleft=True, labelright=False)

字体配置代码

plt.style.use('seaborn-bright')
plt.rc('text', usetex=True)
plt.rc('text.latex', preamble=r'\usepackage{mathrsfs}')
tex_fonts = {
    # 使用LaTeX渲染所有文本
    "text.usetex": True,
    "font.family": "serif",
    "axes.labelsize": 10.95,
    "font.size": 10.95,
    "legend.fontsize": 10.95,
    "xtick.labelsize": 10.95,
    "ytick.labelsize": 10.95,
    "axes.linewidth":10.95/14,
    "grid.linewidth":0.1}
plt.rcParams.update(tex_fonts)

解决方案

方法1:用LaTeX占位符统一基线

问题源于LaTeX对无负号的0和带负号的数字基线处理不一致,给0添加负号占位符即可让所有标签基线对齐。在循环的轴刻度调整部分添加以下代码:

# 获取当前X轴主刻度值
xticks = axs[i,j].get_xticks()
# 重新设置标签,用\vphantom{-}给0添加负号占位符
axs[i,j].set_xticklabels([r'$\vphantom{-}{}$'.format(tick) for tick in xticks])

方法2:手动调整0标签位置

若方法1无效,可单独定位0标签并调整垂直偏移:

for label in axs[i,j].get_xticklabels():
    if label.get_text() == '0':
        # 负数表示向下移动,可根据实际显示效果微调数值
        label.set_y(label.get_y() - 0.015)

方法3:修改rc参数统一对齐方式

在字体配置字典中添加xtick.alignment参数,强制所有X轴标签底部对齐:

tex_fonts = {
    # 原有配置...
    "xtick.alignment": "bottom"
}
plt.rcParams.update(tex_fonts)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:32:48