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

