Matplotlib中移除xtick/ytick坐标轴刻度但保留网格的方法
如何在Matplotlib中移除坐标轴刻度却保留网格?
哈哈,这个场景太常见了——想用ax.set_xticks([])或ax.set_yticks([])去掉x、y轴的刻度,结果连网格也一起消失了,但又想保留网格作为参考线,就像你给出的目标效果这样:
别担心,有两种简单的方法可以实现你的需求:
方法一:隐藏刻度线和标签,保留刻度位置(推荐)
其实根本不用清空刻度列表,我们只需要把刻度线和刻度标签隐藏起来,让Matplotlib仍然基于原来的刻度位置生成网格就行。代码示例如下:
import matplotlib.pyplot as plt # 创建画布和轴对象 fig, ax = plt.subplots() # 先绘制你的数据(这里用示例曲线代替) ax.plot([1, 2, 3, 4], [2, 4, 1, 3]) # 隐藏x轴的刻度线和标签:bottom=False藏刻度线,labelbottom=False藏标签 ax.tick_params(axis='x', which='both', bottom=False, labelbottom=False) # 隐藏y轴的刻度线和标签:left=False藏刻度线,labelleft=False藏标签 ax.tick_params(axis='y', which='both', left=False, labelleft=False) # 开启网格,此时网格会基于原刻度位置生成,完全不受影响 ax.grid(True) plt.show()
这个方法的好处是不需要手动指定网格位置,完全沿用Matplotlib默认的刻度逻辑,省心又高效。
方法二:手动指定网格线位置
如果你想自定义网格的位置,不依赖默认刻度,也可以用这个思路:先清空主刻度,然后手动设置次要刻度的位置,再开启次要刻度的网格:
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([1, 2, 3, 4], [2, 4, 1, 3]) # 移除默认的主刻度 ax.set_xticks([]) ax.set_yticks([]) # 手动指定次要刻度的位置(也就是你想要的网格线位置) ax.set_xticks([1, 2, 3, 4], minor=True) ax.set_yticks([1, 2, 3, 4], minor=True) # 开启次要刻度对应的网格 ax.grid(which='minor') plt.show()
这种方式适合你需要完全自定义网格间距的场景,灵活性更高。
内容的提问来源于stack exchange,提问作者Dawei Wang




