我是python的新手,我试图创建一个12个数字的3X4网格数字,数字看起来像这样:
我使用此代码显示它们:
for i in range(0,11):
show(x_train[i].reshape(28,28))
show的定义如下:
def show(mnst):
plt.figure()
plt.imshow(mnst, cmap='gray', interpolation='nearest')
plt.show()
现在我尝试做我想做的事情如下:
show(x_train[:12].reshape(28*3,28*4));
我把这段代码看作x_train中的12个第一个数字,每个数字为28X28,并将整个内容重塑为一个数字中28X28个数字的3X4网格。
但由于某种原因,我得到了这个奇怪的12X4数字: 
我缺少什么? 







答案 0 :(得分:1)
循环使用您正在使用的函数会导致在每次迭代时创建一个新的figure
实例。如果要绘制多个图像,则需要创建包含多个子图的单个figure
。
有很多方法可以在python中的单个图中创建子图。我经常使用的(似乎是你需要的)是plt.subplots()
。您可以按如下方式启动您的数字:
fig,axes = plt.subplots( 3,4, figsize=[12,9] )
这将返回一个图形实例fig
,以及一个3行和4列的轴数组(一个轴是您绘制图像的框架)。
然后,您可以通过在轴上循环来绘制(或.imshow)每个轴。
for i,iax in enumerate( axes.flatten() ):
iax.imshow(x_train[i].reshape(28,28), cmap='gray', interpolation='nearest')
fig.show()
请注意,我展平了包含轴的数组。这不会更改子图的布局,因为它不会影响使用ax
创建的plt.subplots()
实例。