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

如何在Matplotlib中设置双层X轴刻度并配置不同旋转角度

实现Matplotlib双层X轴标签的解决方案

嘿,我帮你搞定双层X轴标签的问题啦!你原来的代码里两次设置xticks会互相覆盖,所以没法同时显示两层标签。咱们可以通过创建共享X轴的副坐标轴来实现这个需求,具体修改后的代码如下:

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import make_interp_spline

def jinDrawPragnogram2021013002():
    x = list(range(1,11))
    data_augment = [ 0, 0, 1, 5, 6, 7.5, 8, 10, 11, 10.5]
    data_upperlimit = [1.5, 2.5, 4.5, 7.5, 10, 11, 11.5, 12, 12.5, 13]
    data_mean = [2.1, 3.78, 6.3, 8.4, 9.24, 9.66, 10.08, 10.5, 10.92]
    x_label_1 = ['16+2', '18+4', '22+6', '28+6', '33+1', '35+1', '36+0', '37+2', '38+4', '39+1']
    x_label_2 = ['2019/6/10', '2019/6/26', '2019/7/26', '2019/9/6', \
                '2019/10/6', '2019/10/20', '2019/10/26', '2019/11/4', \
                '2019/11/13', '2019/11/17']
    fig, ax = plt.subplots()
    
    # 绘制曲线
    ax.plot(x, data_augment)
    
    # 设置下层X轴(主坐标轴)
    ax.set_xticks(x)
    ax.set_xticklabels(x_label_2, rotation=70, ha='right')  # ha='right'让旋转后的标签对齐更美观
    
    # 创建上层X轴(副坐标轴,共享Y轴)
    ax_top = ax.twiny()
    ax_top.set_xticks(x)
    ax_top.set_xticklabels(x_label_1, rotation=0)  # 不旋转
    
    # 调整布局,避免标签被截断
    plt.tight_layout()
    
    plt.show()
    return

if __name__=='__main__':
    jinDrawPragnogram2021013002()

关键步骤说明:

  • 改用ax.set_xticks和ax.set_xticklabels的面向对象写法,比直接用plt.xticks更灵活可控,不会出现覆盖问题
  • 通过ax.twiny()创建一个共享Y轴的副坐标轴,这个轴就是我们需要的上层X轴
  • 给上层轴设置和主轴完全相同的刻度位置x,确保两层标签一一对应
  • 给下层标签加上ha='right'(水平对齐方式为右),旋转后标签不会歪歪扭扭,可读性更好
  • 最后用plt.tight_layout()自动调整图表布局,避免底部的日期标签被截断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:02:32