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

