如何使用subplot展示MNIST数据集中超过9张的手写数字图片
subplot参数逻辑说明
pyplot.subplot(330 + 1 + i)用到了matplotlib子图参数的缩写规则:传入三位整数时,第一位对应子图网格的行数,第二位对应列数,第三位对应当前子图的序号(序号从1开始计数)。
330 + 1 + i最终会生成331到339的整数,对应3行3列的子图网格,总容量为9张子图。当你把循环改为range(10)时,i=9会生成序号10,超出3行3列网格的容量上限,因此抛出ValueError。
展示超过9张图片的实现方案
你只需要调整子图网格的行列数,匹配你需要展示的图片总数即可,同时可以优化原有代码的展示逻辑:
- 原有代码把
pyplot.show()放在循环内部,会导致每次生成一个子图就单独弹出仅含单张图的窗口,建议移到循环外统一展示所有子图 - 推荐使用
subplot(nrows, ncols, index)的显式传参写法,可读性更高,不容易出现参数计算错误
以下是可直接运行的示例代码,支持自定义展示数量:
from matplotlib import pyplot # 自定义子图行数、列数,总可展示数量 = 行数 * 列数 n_rows = 4 n_cols = 5 # 这里设置为20张,你可以根据需求调整行列数 total_show = n_rows * n_cols for i in range(total_show): pyplot.subplot(n_rows, n_cols, i+1) pyplot.imshow(train_X[i], cmap='gray') # 可选:隐藏坐标轴,让图片展示更美观 pyplot.axis('off') # 所有子图绘制完成后统一显示 pyplot.show()
内容的提问来源于stack exchange,提问作者Palinkara
相关产品推荐
相关产品推荐

