更新函数中的matplotlib映像

时间:2018-07-25 13:29:04

标签: python matplotlib

我有一个处理图像的循环,我希望在第100次迭代(例如)中使用matplotlib在单个输出窗口中显示图像。因此,我试图编写一个函数,该函数将以numpy张量作为输入并显示相应的图像。

这是我所无法使用的:

def display(image):
  global im

  # If  im has been initialized, update it with the current image; otherwise initialize im and update with current image.   
  try:
    im
    im.set_array(image)
    plt.draw()
  except NameError:
    im = plt.imshow(image, cmap=plt.get_cmap('gray'), vmin=0, vmax=255)
    plt.show(block=False)
    plt.draw()

我一开始试图通过FuncAnimation传递它,但这似乎是为了让动画调用一个函数来执行更新,而不是对matplotlib进行函数调用来显示结果。

上面的代码打开一个窗口,但是它似乎没有更新。有人可以在这里向我指出正确的方向吗?

非常感谢,

Justin

1 个答案:

答案 0 :(得分:2)

也许您可以使用以下组合:

第一个将重新绘制图形,而第二个将调用GUI事件循环以更新图形。

您也不必一直调用imshow,只需在“ im”对象上调用“ set_data”方法就足够了。这样的事情应该起作用:

import matplotlib.pyplot as plt
import numpy

fig,ax = plt.subplots(1,1)
image = numpy.array([[1,1,1], [2,2,2], [3,3,3]])
im = ax.imshow(image)

while True:       
    image = numpy.multiply(1.1, image)
    im.set_data(image)
    fig.canvas.draw_idle()
    plt.pause(1)

此内容改编自this答案。希望对您有所帮助。