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

Matplotlib共享x轴子图中如何单独隐藏上方子图的x轴刻度?

解决共享X轴时隐藏ax1刻度但保留ax2刻度的问题

这个坑我之前踩过!因为设置sharex=True后,ax1和ax2共享同一个XAxis对象,直接用ax1.set_xticks([])会把共享的刻度数据清空,导致两个轴的刻度都消失。给你两个实用的解决方案:

方法一:用tick_params控制显示(推荐)

这个方法不会修改共享的刻度核心数据,只是单独隐藏ax1上的刻度线和标签,完全不影响ax2的显示:

import matplotlib.pyplot as plt

f, (ax1, ax2) = plt.subplots(2,1, figsize=(7,8), sharex=True, gridspec_kw={'height_ratios':[3,1],'hspace':0.05})

# 隐藏ax1的x轴刻度线和标签
ax1.tick_params(axis='x', which='both', bottom=False, labelbottom=False)

# 示例绘图
ax1.plot([1,2,3,4], [10,20,15,25])
ax2.plot([1,2,3,4], [2,1,3,2])

plt.show()

参数说明:

  • axis='x':指定只针对x轴操作
  • which='both':同时作用于主刻度和副刻度
  • bottom=False:隐藏刻度线
  • labelbottom=False:隐藏刻度标签

方法二:手动对齐X轴范围(适合特殊场景)

如果不想依赖sharex=True,可以手动让两个轴的X范围保持一致,这样也能实现对齐,同时各自独立控制刻度:

import matplotlib.pyplot as plt

f, (ax1, ax2) = plt.subplots(2,1, figsize=(7,8), gridspec_kw={'height_ratios':[3,1],'hspace':0.05})

# 先绘制ax1内容,获取其X轴范围
ax1.plot([1,2,3,4], [10,20,15,25])
x_min, x_max = ax1.get_xlim()

# 设置ax2的X范围和ax1一致
ax2.set_xlim(x_min, x_max)

# 隐藏ax1的刻度
ax1.set_xticks([])

# 绘制ax2内容
ax2.plot([1,2,3,4], [2,1,3,2])

plt.show()

这个方法的缺点是后续如果调整ax1的X范围,ax2不会自动同步,需要手动更新,所以优先推荐第一种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:33:42