如何在Google Colab中用Matplotlib分两行堆叠不同文件夹的图片?
解决Matplotlib在Colab中垂直堆叠展示图片的异常问题
咱们先拆解你代码里导致异常的几个关键问题:
- 用错了绘图方法:你调用
axs[0].plot()是用来画折线图的,展示图片根本不需要这个方法,完全是多余的操作。 - 没绑定子图轴展示图片:你直接用
plt.imshow()会默认把所有图片都画在同一个当前轴上,最后就只显示最后一张,而你创建的两行子图轴根本没被用到,所以会是空的。 - 变量名错误:代码里的
len(images)是个未定义的变量,而且就算定义了,这个计算对展示图片来说毫无意义。 - 子图初始化不对:如果想每行展示多张图,你得在
subplots()里同时指定行数和列数,只给行数的话默认是1列,根本满足不了你每行2张的需求。
修正后的完整代码
import glob import matplotlib.pyplot as plt import matplotlib.image as mpimg %matplotlib inline # 先挂载Google Drive(如果还没挂载的话) from google.colab import drive drive.mount('/content/drive') # 读取两个文件夹中的图片 front_images = [] for img_path in glob.glob('drive/My Drive/chaospicsf/*.png'): front_images.append(mpimg.imread(img_path)) back_images = [] for img_path in glob.glob('drive/My Drive/chaospicsb/*.png'): back_images.append(mpimg.imread(img_path)) columns = 2 # 每行展示2张图片 rows = 2 # 总共2行 # 创建2行2列的子图布局,figsize可以按需调整画布大小 fig, axs = plt.subplots(rows, columns, figsize=(10, 8)) fig.suptitle('Vertically stacked subplots', y=1.02) # 调整标题位置避免和图片重叠 # 展示第一行(front文件夹)的图片 for i, image in enumerate(front_images[:columns]): axs[0, i].imshow(image) axs[0, i].axis('off') # 关闭坐标轴,让图片展示更整洁 # 展示第二行(back文件夹)的图片 for i, image in enumerate(back_images[:columns]): axs[1, i].imshow(image) axs[1, i].axis('off') plt.tight_layout() # 自动调整子图间距,避免图片互相挤压 plt.show()
额外说明
- 如果你的文件夹里图片数量超过2张,上面的代码会只取前2张展示;如果想展示所有图片,可以根据图片数量动态计算列数,比如
columns = len(front_images)(但要注意画布大小要对应调整,避免图片太小)。 axis('off')是可选的,如果你需要保留坐标轴可以去掉这行。- 一定要确保已经挂载了Google Drive,否则会找不到
drive/My Drive/路径下的文件。
内容的提问来源于stack exchange,提问作者Rattatachu
相关产品推荐
相关产品推荐

