如何水平对齐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
相关产品推荐
相关产品推荐

