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

为何Matplotlib部分子图网格线显示异常?如何统一设置网格?

问题原因分析

Matplotlib的网格线默认是与刻度位置对齐的,当你调用set_xticks([])或set_yticks([])时,会直接移除对应轴的刻度位置,导致对应的网格线失去参照而不显示:

  • (0,1)子图设置了set_yticks([]),移除了y轴刻度,因此水平网格线消失,只剩垂直网格线
  • (1,0)、(1,2)、(2,0)、(2,2)子图中,非最后一行的设置了set_xticks([]),移除了x轴刻度,因此垂直网格线消失,只剩水平网格线
  • (1,1)和(2,1)子图同时移除了x轴(非最后一行)和y轴刻度,所以网格线完全消失
解决方法

不要直接清空刻度,而是通过tick_params隐藏刻度线和标签,保留刻度的位置信息,这样网格线就能正常生成。修改后的代码如下:

from matplotlib import pyplot
pyplot.style.use('classic')
pyplot.rcParams.update( {
    'text.usetex': True,
    "font.family": "serif",
    'text.latex.preamble': r'\usepackage{amsmath, amssymb, mlmodern}', } )
import numpy


fig, ax = pyplot.subplots(3,3)
fig.tight_layout()
fig.subplots_adjust(hspace=0.1, wspace=0.1,
    left=0.09, right=.95, top=.95, bottom=.09)

x = numpy.linspace(0, 8, 100)

for i in range(3):
    for j in range(3):
        ax[i,j].plot(x, numpy.sin((1+j)*x+numpy.pi*i), )
        ax[i,j].grid(which='both')
        # 替换原有的set_xticks/set_yticks,改为隐藏刻度线和标签
        if i!=2: 
            # 隐藏x轴的刻度线和标签
            ax[i,j].tick_params(axis='x', which='both', bottom=False, labelbottom=False)
        if j==1: 
            # 隐藏y轴的刻度线和标签
            ax[i,j].tick_params(axis='y', which='both', left=False, right=False, labelleft=False, labelright=False)
        if j==2: 
            ax[i,j].yaxis.tick_right()

ax[0,0].set_ylabel('$\phi=0$')
ax[1,0].set_ylabel('$\phi=\pi$')
ax[2,0].set_ylabel('$\phi=2\pi$')

ax[2,0].set_xlabel('$f = 1$')
ax[2,1].set_xlabel('$f = 2$')
ax[2,2].set_xlabel('$f = 3$')

pyplot.savefig('waves.png')
效果说明

修改后所有子图都会显示完整的水平和垂直网格线,同时保持原有的刻度隐藏效果(非最后一行子图无x轴刻度标签,中间列子图无y轴刻度标签)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:36:02