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
相关产品推荐
相关产品推荐

