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

Matplotlib中如何添加y轴刻度标签但不显示对应网格线?

解决Matplotlib中特定y轴刻度只显示标签不显示网格的问题

嘿,我之前刚好遇到过一模一样的需求,给你分享个超好用的方案,分分钟搞定👇

核心思路

把需要保留网格的刻度(1、2、3、4、5)设为主刻度,默认显示标签和网格;把只需要标签的3.14设为次要刻度,单独关闭次要刻度的网格线,同时让它显示标签。这样既能区分开两种刻度的样式,又不会互相干扰。

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据,方便演示
x = np.linspace(0, 10, 100)
y = np.sin(x) + 3  # 让曲线大致围绕3波动,方便观察3.14的刻度

# 创建绘图对象
fig, ax = plt.subplots(figsize=(8, 5))
ax.plot(x, y, label='sin(x)+3')

# 1. 设置主y轴刻度:1-5,保留标签和网格
ax.set_yticks([1, 2, 3, 4, 5])
ax.yaxis.grid(True, which='major', linestyle='-', alpha=0.7)  # 明确开启主网格,可调整样式

# 2. 设置次要y轴刻度:仅3.14,显示标签但关闭网格
ax.set_yticks([3.14], minor=True)
ax.tick_params(axis='y', which='minor', labelleft=True, labelsize=10)  # 开启次要刻度标签,可调整大小
ax.yaxis.grid(False, which='minor')  # 关闭次要刻度的网格线

# 3. 添加你提到的红色终止水平线(这里示例终止于x=5的位置,可按需调整xmax)
ax.axhline(y=3.14, xmax=0.5, color='red', linestyle='--', label=r'$y=\pi$')

# 其他美化设置
ax.legend()
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
plt.title('Y轴刻度:主刻度带网格,3.14仅显示标签')

plt.show()

代码解释

  • which='major':针对主刻度设置网格样式,默认主刻度的网格是开启的,这里可以明确调整线条样式、透明度等。
  • set_yticks([3.14], minor=True):把3.14添加为次要刻度,不会影响主刻度的设置。
  • tick_params(axis='y', which='minor', labelleft=True):默认次要刻度是不显示标签的,所以需要手动开启。
  • yaxis.grid(False, which='minor'):直接关闭次要刻度对应的网格线,完美实现“只显示标签不显示网格”的需求。

备选方案(不推荐但可用)

如果你不想用主次刻度,也可以先把所有刻度(包括3.14)都加到主刻度里,再手动隐藏对应3.14的网格线:

ax.set_yticks([1,2,3,3.14,4,5])
# 获取所有y轴网格线,找到对应3.14的那条并隐藏
for grid_line in ax.yaxis.get_gridlines():
    if abs(grid_line.get_ydata()[0] - 3.14) < 1e-6:  # 用浮点精度判断避免误差
        grid_line.set_visible(False)

不过这个方法容易因为浮点精度问题出错,还是主次刻度的方案更稳妥。

这样操作后,你就能得到想要的效果:1-5的刻度既有标签又有灰色网格,3.14只有标签没有网格,红色水平线也能正常显示~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:14:40