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

如何精准调整Matplotlib次级X轴位置?实现多层刻度标签

解决Matplotlib多层X轴刻度标签精准定位问题

方案一:精准调整次级轴标签位置

你之前用换行符\n调整位置的方式不够精准,可以直接遍历次级轴的刻度标签,通过set_y()方法精准控制标签的垂直位置(基于轴坐标系,0为轴的位置,正数代表向上偏移):

修改原代码中次级轴的部分如下:

# Add second x axis
sec2 = ax.secondary_xaxis(location=0)
sec2.set_xticks([5.5 + 12 * i for i in range(test_data_2 // 12)],
                labels=[f'{5 + i * 5}' for i in range(test_data_2 // 12)])
sec2.tick_params('x', length=0)

# 精准上调标签位置,y值可根据需求调整(比如0.03)
for label in sec2.get_xticklabels():
    label.set_y(0.03)

方案二:更规范的多层X轴实现

如果核心需求是添加多层X轴刻度标签,secondary_xaxis其实更适合轴单位转换的场景,用twiny()创建平行轴的方式更贴合需求,还能避免换行符的问题:

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import os
os.environ["PATH"] += os.pathsep + '/usr/local/texlive/2024/bin/x86_64-linux'

if __name__ == '__main__':
    plt.rcParams.update({
        "text.usetex": True,
        "font.family": "serif",
        "font.serif": "Computer Modern Roman",
    })

    test_data = 10
    test_data_2 = 24

    # Create plot and axis
    fig, ax = plt.subplots()

    # Plot
    ax.plot([i for i in range(test_data)], [i for i in range(test_data)], label="Test")

    # 第一层X轴(下层标签)
    x_axis = ['30', '40', '50'] * (test_data_2 // 3)
    ax.set_xticks(range(len(x_axis)), labels=x_axis)
    ax.tick_params(axis='x', pad=20)  # 给上层标签预留空间

    # 创建第二层X轴(上层标签,用twiny)
    ax2 = ax.twiny()
    # 设置第二层刻度位置和标签
    ax2.set_xticks([5.5 + 12 * i for i in range(test_data_2 // 12)])
    ax2.set_xticklabels([f'{5 + i * 5}' for i in range(test_data_2 // 12)])
    # 隐藏上层轴的边框,只保留标签
    ax2.spines['top'].set_visible(False)
    # 调整标签位置,pad负数让标签下移到主轴下方合适位置
    ax2.tick_params(axis='x', length=0, pad=-15)

    plt.show()

这种方式通过调整pad参数和轴的可见性,能更灵活地控制多层标签的布局,比换行符的方式更精准可控。

内容的提问来源于stack exchange,提问作者Raoul Luqué

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:56:17