如何移除Matplotlib子图组边缘的边距与空白区域
彻底移除Matplotlib子图网格的边缘空白和边框
要实现完全无空白、子图紧密排列的效果,你需要在现有代码基础上做以下关键调整:
- 将
subplots_adjust的left、right、top、bottom全部设为0,同时把wspace和hspace设为0,彻底消除子图间和画布边缘的间距 - 用
imshow替代matshow(matshow默认强制轴宽高比为1,会自带额外边距) - 确保
figsize的宽高比和子图的行列比例严格匹配,避免画布本身存在多余空间
修改后的完整代码:
import numpy as np import matplotlib.pyplot as plt rows, columns = 4, 3 images = [np.random.rand(4, 4) for i in range(rows * columns)] # 画布尺寸比例与子图行列比例一致,保证无多余空间 fig, axs = plt.subplots(rows, columns, figsize=(columns, rows)) axs = axs.flatten() for img, ax in zip(images, axs): # 使用imshow并设置aspect='auto',让图像完全填充子图区域 ax.imshow(img, aspect='auto') # 完全关闭轴的所有显示元素 ax.axis('off') # 移除子图的边框 ax.set_frame_on(False) # 彻底清除所有内外间距 plt.subplots_adjust(left=0, right=1, top=1, bottom=0, wspace=0, hspace=0) plt.show()
关键调整说明
subplots_adjust参数:left=0, right=1, top=1, bottom=0让子图完全填满整个画布,wspace=0, hspace=0消除子图之间的横向、纵向间隙imshow替代matshow:matshow会强制轴宽高比为1,即使子图尺寸不匹配也会留空白;imshow搭配aspect='auto'可让图像完全填充子图区域set_frame_on(False):彻底移除子图的边框,避免残留边框占用空间
调整后,子图会完全紧密排列,画布边缘与子图之间不会有任何空白。
内容的提问来源于stack exchange,提问作者Peyman
相关产品推荐
相关产品推荐

