Matplotlib 3.8中subplot2grid创建的轴无法关闭问题求助
Matplotlib 3.8中subplot2grid创建的轴关闭后原轴恢复的问题解析与解决办法
问题原因
你的代码里,先用plt.subplots(2,2)创建了4个独立子图,随后用subplot2grid生成的跨行列轴只是覆盖在原ax[0,0]和ax[1,0]上方,原有的两个子图并未被删除。Matplotlib 3.7及更早版本中,关闭上层跨轴时,底层被覆盖的子图不会自动显示;但3.8版本调整了轴可见性处理逻辑:当上层轴被设置为不可见时,底层被遮挡的轴会自动恢复可见,这就导致你看到“原子图恢复”的现象。
解决办法
方案1:直接用subplot2grid构建所有子图
避免先创建多余子图,直接通过subplot2grid定义完整布局,消除底层冗余轴:
import matplotlib.pyplot as plt fig = plt.figure() # 创建跨两行的左侧大轴 ax_big = plt.subplot2grid((2, 2), (0, 0), rowspan=2) # 创建右侧的两个子图 ax_top_right = plt.subplot2grid((2, 2), (0, 1)) ax_bottom_right = plt.subplot2grid((2, 2), (1, 1)) # 关闭大轴 ax_big.axis('off') plt.show()
方案2:移除或关闭原有的底层子图
如果必须保留plt.subplots初始化方式,需手动处理被覆盖的原轴:
方式A:关闭原轴显示
import matplotlib.pyplot as plt fig, ax = plt.subplots(2, 2) # 保存原有的两个轴对象 orig_ax00 = ax[0, 0] orig_ax10 = ax[1, 0] # 创建跨轴覆盖原位置 ax_big = plt.subplot2grid((2, 2), (0, 0), rowspan=2) # 同时关闭上层跨轴和底层原轴 ax_big.axis('off') orig_ax00.axis('off') orig_ax10.axis('off') plt.show()
方式B:彻底删除原轴
直接从画布移除被覆盖的原轴,避免后续显示干扰:
import matplotlib.pyplot as plt fig, ax = plt.subplots(2, 2) # 删除原有的两个子图 fig.delaxes(ax[0, 0]) fig.delaxes(ax[1, 0]) # 创建跨轴 ax_big = plt.subplot2grid((2, 2), (0, 0), rowspan=2) ax_big.axis('off') plt.show()
内容的提问来源于stack exchange,提问作者G Sharman
相关产品推荐
相关产品推荐

