2017-05-09 122 views
1

我有一个形状数组(7,4,100,100),这意味着7个图像的大小为100x100,深度为4.我想在一个绘图上显示所有这些图像。我尝试以下使用matplotlib:在单个绘图中显示来自numpy数组的多个图像

input_arr=numpy.load(r'C:\Users\x\samples.npy') 

    for i, el in enumerate(input_arr): 
     #moving axis to use plt: i.e [4,100,100] to [100,100,4] 
     array2= numpy.moveaxis(input_arr[i],0,-1) 
     plt.subplot(3,3, i + 1), plt.imshow(array2[i]) 
    plt.show() 

但它挤压在情节中的图像以显示在下面,其中在左图像是单一图像,并且另一种是多个图像的曲线图所示。任何解决方案或其他方法? enter image description here

+3

请修正缩进问题,证实了这一点。 – ozgur

+1

还请提供'input_arr'的简短示例 – Nuageux

+3

寻求调试帮助的问题(“为什么代码不工作?”)需要提供[mcve]。在这种情况下非常简单,只需使用一些随机数据即可。 – ImportanceOfBeingErnest

回答

1

当用np.moveaxis移动的轴,你已经编制索引的输入阵列,以获得仅阵列的第i组件。因此,当您使用imshow时,您不需要绘制第i个索引array2,而是整个array2

for i, el in enumerate(input_arr): 
    #moving axis to use plt: i.e [4,100,100] to [100,100,4] 
    array2 = numpy.moveaxis(input_arr[i], 0, -1) 
    plt.subplot(3, 3, i + 1) 
    plt.imshow(array2)  # <- I changed this line 
plt.show() 

您可以通过打印的array2在你的代码的形状和array2[i]

print array2.shape 
# (100, 100, 4) 
print array2[i].shape 
# (100, 4)