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

Matplotlib子图仅第二个显示网格,如何实现双生子图均显示网格?

Matplotlib子图网格显示问题解决

问题描述

使用Matplotlib绘图时,代码仅能让第二个子图显示网格,第一个子图无网格效果,相关代码如下:

ep = np.linspace(1, 500, 500)
fig, axs = plt.subplots(2)
plt.grid()
axs[0].set_title('me')
axs[0].set(xlabel='you', ylabel='me')
axs[0].plot(ep, me_es)
axs[1].set(xlabel='ty', ylabel='no')
axs[1].set_title('sec')
axs[1].plot(ep,me_es)
plt.tight_layout(pad=1, w_pad=1.5, h_pad=2.0)
plt.rcParams['figure.figsize'] = (12.4, 10.8)

问题原因

plt.grid() 是Matplotlib的全局函数,它只会作用于当前活跃的子图。创建2个子图后,默认最后一个子图(axs[1])处于活跃状态,所以调用plt.grid()只会给第二个子图添加网格,第一个子图不受影响。

解决方法

方法1:逐个给子图添加网格

直接通过子图对象调用grid()方法,精准控制每个子图的网格:

ep = np.linspace(1, 500, 500)
fig, axs = plt.subplots(2)

# 给第一个子图添加网格
axs[0].grid()
axs[0].set_title('me')
axs[0].set(xlabel='you', ylabel='me')
axs[0].plot(ep, me_es)

# 给第二个子图添加网格
axs[1].grid()
axs[1].set(xlabel='ty', ylabel='no')
axs[1].set_title('sec')
axs[1].plot(ep, me_es)

plt.tight_layout(pad=1, w_pad=1.5, h_pad=2.0)
plt.rcParams['figure.figsize'] = (12.4, 10.8)

方法2:批量给所有子图添加网格

如果子图数量较多,用循环遍历子图列表批量设置网格更高效:

ep = np.linspace(1, 500, 500)
fig, axs = plt.subplots(2)

# 遍历所有子图添加网格
for ax in axs:
    ax.grid()

axs[0].set_title('me')
axs[0].set(xlabel='you', ylabel='me')
axs[0].plot(ep, me_es)
axs[1].set(xlabel='ty', ylabel='no')
axs[1].set_title('sec')
axs[1].plot(ep, me_es)

plt.tight_layout(pad=1, w_pad=1.5, h_pad=2.0)
plt.rcParams['figure.figsize'] = (12.4, 10.8)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:08:21