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

如何在Matplotlib中移除X轴50位置的网格线但保留对应刻度

如何移除Matplotlib中X轴特定位置的网格线但保留对应刻度?

嗨,我来帮你搞定这个问题!要保留X轴50位置的刻度但移除对应的网格线,我们不能直接用默认的plt.grid()(它会让所有刻度都对应显示网格线),而是需要手动控制网格线的显示位置。

解决思路

Matplotlib的网格线默认和刻度一一对应,我们可以先获取所有X轴刻度的位置,过滤掉不需要显示网格线的50,然后指定仅在剩下的刻度位置绘制网格线,同时保留原始的所有刻度显示。

修改后的完整代码

if __name__ == '__main__':
    import matplotlib.pyplot as plt
    from matplotlib.pyplot import MultipleLocator
    x = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900]
    y = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    f, ax = plt.subplots(figsize=(10, 7), dpi=200)
    ax.xaxis.set_major_locator(MultipleLocator(50))
    
    plt.plot(x, y, 'o-', color="r", lw=4, ms=10)
    
    # 关键部分:手动控制X轴网格线位置
    # 获取所有X轴主刻度的位置
    xticks = ax.get_xticks()
    # 过滤掉50这个不需要显示网格线的刻度
    filtered_xticks = [tick for tick in xticks if tick != 50]
    # 保留所有原始刻度显示
    ax.set_xticks(xticks)
    # 仅在过滤后的刻度位置绘制X轴主网格线
    ax.xaxis.grid(True, which='major', xticks=filtered_xticks)
    # Y轴网格线保持默认显示
    ax.yaxis.grid(True, which='major')
    
    plt.savefig("question.png")

代码说明

  • ax.get_xticks():获取当前X轴所有主刻度的位置列表
  • 列表推导式filtered_xticks:移除列表中值为50的元素
  • ax.set_xticks(xticks):确保所有原始刻度(包括50)都正常显示在X轴上
  • ax.xaxis.grid(...):指定仅在filtered_xticks中的位置绘制X轴网格线,这样就跳过了50对应的网格线

这样修改后,你就能看到X轴50位置的刻度依然存在,但对应的网格线已经被移除啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:04:06