如何将多个imshow()结果放在一个图中?

时间:2018-10-03 06:16:27

标签: python matplotlib

我想将所有迭代绘制在矩阵syn0的一个图中,但是下面的代码仅显示最后一个迭代,如果更改代码,它将打开60000次,如何我将所有迭代都绘制在一个图中?

syn0 = 2 * np.random.random((3, 4)) - 1

arr_syn0[0][0].append(syn0[0][0])
arr_syn0[0][1].append(syn0[0][1])
arr_syn0[0][2].append(syn0[0][2])
arr_syn0[0][3].append(syn0[0][3])
arr_syn0[1][0].append(syn0[1][0])
arr_syn0[1][1].append(syn0[1][1])
arr_syn0[1][2].append(syn0[1][2])
arr_syn0[1][3].append(syn0[1][3])
arr_syn0[2][0].append(syn0[2][0])
arr_syn0[2][1].append(syn0[2][1])
arr_syn0[2][2].append(syn0[2][2])
arr_syn0[2][3].append(syn0[2][3])


plt.figure()
x=plt.imshow(syn0,aspect='auto', interpolation="nearest", cmap='YlOrRd_r', origin="upper")
plt.colorbar(x)
plt.title('syn1')
plt.show()

1 个答案:

答案 0 :(得分:0)

您说要在一个图中绘制所有迭代,但是由于要迭代60000张图像,所以我想您要在不打开新图的情况下在同一图形上绘制新数据。

为此,您应该仅在第一张图像上使用imshow方法,在其他图像上使用draw方法,然后是pause方法,该方法将调用GUI事件循环并更新图像。

尝试将您的代码简化为minimal, complete and verifiable example,我会这样做:

import numpy as np
import matplotlib.pyplot as plt

firstImage = True

for j in range(5): 
    syn0 = 2 * np.random.random((3, 4)) - 1
    if firstImage:    
        img=plt.imshow(syn0,aspect='auto', interpolation="nearest", cmap='YlOrRd_r', origin="upper") 
        firstImage = False
    else:
        img.set_data(syn0)
        plt.pause(0.1)
        plt.draw()
    plt.title('syn1') 

此代码一个接一个地显示同一张图上的不同图像。 希望这会有所帮助。