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

如何在Matplotlib 2×1子图中移除上方子图的X轴刻度/标签?

解决Matplotlib实时绘图中仅下方子图显示X轴刻度的问题

问题背景

开发一个展示4种读数的Python GUI,通过Matplotlib Animation实现实时绘图:

  • 上方子图为双Y轴结构,展示2种读数;下方子图同样为双Y轴,展示另外2种读数
  • X轴显示当前时间字符串
  • 需求:仅保留下方子图的X轴刻度,但尝试sharex参数、set_xticks([])等方法均未生效

问题原因

在animate_graph函数中,每次更新绘图时调用了ax11.clear(),该操作会重置轴的所有配置,包括之前设置的隐藏X轴的参数,导致之前的设置被覆盖失效。

解决方案

在每次调用ax11.clear()之后,重新添加隐藏上方子图X轴刻度和标签的代码,确保每次绘图更新后配置都能生效。

修改后的animate_graph函数关键部分

def animate_graph(i,x1,y11,y12,ax11
                  ,ax12
                  ,x2
                  ,y21,y22,ax21,ax22
                  ):
    # 生成随机数据
    a = (2-1)*np.random.random()+1
    b = (4-3)*np.random.random()+3
    c = (6-5)*np.random.random()+5
    d = (8-7)*np.random.random()+7

    x1.append(dt.datetime.now().strftime('%H:%M:%S'))
    y11.append(a)
    y12.append(b)

    x2.append(dt.datetime.now().strftime('%H:%M:%S'))
    y21.append(c)
    y22.append(d)

    # 保留最近10条数据
    x1 = x1[-10:]
    y11 = y11[-10:]
    y12 = y12[-10:]

    x2 = x2[-10:]
    y21 = y21[-10:]
    y22 = y22[-10:]

    # 清空上方子图主轴后,立即隐藏X轴刻度和标签
    ax11.clear()
    ax11.tick_params(axis='x', bottom=False, labelbottom=False)
    
    ln1 = ax11.plot(x1,y11,colors[0],label = 'Temp(C)')
    ax11.tick_params(axis = 'y',labelcolor = colors[0])

    ax12.clear()
    ln2 = ax12.plot(x1,y12,colors[1],label = 'RH(%?)')
    ax12.tick_params(axis = 'y',labelcolor = colors[1])

    lns1 = ln1 + ln2
    labs1 = [l.get_label() for l in lns1]
    ax11.legend(lns1,labs1,bbox_to_anchor = (0,1.02,1,0.102),loc = 3,ncol = 3,borderaxespad = 0)

    ax21.clear()
    ln3 = ax21.plot(x2,y21,colors[0],label = 'CO(%)')
    ax21.tick_params(axis = 'y',labelcolor = colors[0])

    ax22.clear()
    ln4 = ax22.plot(x2,y22,colors[1],label = 'CO2(%)')

    ax22.tick_params(axis = 'y',labelcolor = colors[1])

    lns2 = ln3 + ln4
    labs2 = [l.get_label() for l in lns2]
    ax21.legend(lns2,labs2,bbox_to_anchor = (0,1.02,1,0.102),loc = 3,ncol = 3,borderaxespad = 0)

    # 下方子图保留X轴刻度并设置旋转
    ax21.tick_params(axis = 'x',labelrotation = 45)

额外优化建议

  1. 移除原代码中ax11.tick_params(axis = 'x',labelrotation = 45)这一行,因为上方子图的X轴已被隐藏,无需设置刻度旋转
  2. 两个子图的X轴数据完全一致(均为当前时间),可以合并xList1和xList2,减少冗余数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:19:50