无法绘制多张灰度图:plt.subplots索引错误问题求助
解决子图索引错误 & 灰度图绘制优化
嘿,你的问题出在子图数组的索引方式上!让我给你拆解清楚:
错误原因
当你执行figg, axx = plt.subplots(1,3)时,你创建的是1行3列的子图布局,此时返回的axx是一个一维NumPy数组(形状为(3,)),而不是二维数组。你用axx[1,1]这种二维索引去访问,自然会触发IndexError: too many indices for array——因为一维数组根本没有第二个维度的索引。
而你单独用plt.imshow(X_train_gray[14])能正常运行,是因为这时候没有用到子图数组的索引,直接调用了全局绘图接口。
修正后的绘图代码
把索引改成一维的就可以了,另外记得给灰度图指定cmap='gray',不然Matplotlib会用默认的彩色色映射,显示出来的灰度图颜色会不对:
figg, axx = plt.subplots(1, 3, figsize=(12, 4)) # 可以指定图的大小,更美观 # 用一维索引访问子图 axx[0].imshow(X_train_gray[13], cmap='gray') axx[1].imshow(X_train_gray[14], cmap='gray') axx[2].imshow(X_train_gray[15], cmap='gray') # 可以给每个子图加标题,方便区分 axx[0].set_title('Sample 13') axx[1].set_title('Sample 14') axx[2].set_title('Sample 15') # 去掉子图的坐标轴,让图更干净 for ax in axx: ax.axis('off') # 调整子图间距,避免重叠 plt.tight_layout() plt.show()
额外小提示
你的灰度转换代码是没问题的,但可以稍微简化一下:
# 简化版灰度转换:直接处理后归一化,不需要先expand_dims再reshape X_train_gray = np.array([cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) for img in X_train]) / 255.0
这样得到的X_train_gray形状就是(31367, 32, 32),和你原来的结果一致,但代码更简洁。
内容的提问来源于stack exchange,提问作者Yosh
相关产品推荐
相关产品推荐

