从数字python创建一个网格

时间:2016-12-02 10:54:08

标签: python numpy

我是python的新手,我试图创建一个12个数字的3X4网格数字,数字看起来像这样:

enter image description here

enter image description here

我使用此代码显示它们:

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数字: 

enter image description here

我缺少什么? 

1 个答案:

答案 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()实例。