【问题标题】:Update matplotlib image in a function在函数中更新 matplotlib 图像
【发布时间】:2019-01-02 08:18:57
【问题描述】:

我有一个处理图像的循环,我希望在每 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 上调用一个函数来显示结果。

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

非常感谢,

贾斯汀

【问题讨论】:

  • 你的代码看起来很奇怪,你能编辑一下吗?
  • 完成;希望现在更清楚一点。
  • 我猜你忘了打电话给plt.ion() 来激活交互模式。

标签: python matplotlib


【解决方案1】:

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

第一个将重新绘制您的图形,而第二个将调用 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 答案。希望对您有所帮助。

【讨论】:

  • 成功了——非常感谢!出于我的目的,我将 imshow 行更改为 im = ax.imshow(image, cmap=plt.get_cmap('gray'), vmin=0, vmax=255),但它现在可以正常工作了。
猜你喜欢
  • 2020-07-14
  • 2017-08-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多