как мне перерисовать изображение с помощью matplotlib Python?

То, что я пытаюсь сделать, кажется довольно простым, но у меня чертовски много времени, чтобы заставить его работать. Я просто пытаюсь нарисовать изображение с помощью imshow, а затем периодически перерисовывать его по мере поступления новых данных.

Я начал с этого:

fig = figure()
ax = plt.axes(xlim=(0,200),ylim=(0,200))
myimg = ax.imshow(zeros((200,200),float))

Затем я предполагаю, что могу вызвать set_data таким образом, чтобы обновить изображение:

myimg.set_data(newdata)

Я пробовал много других вещей, например, вместо этого я вызывал ax.imshow(newdata) или пытался использовать figure.show() после set_data().


person kjgregory    schedule 05.01.2014    source источник


Ответы (1)


Вы можете просто вызывать figure.canvas.draw() каждый раз, когда добавляете что-то новое к рисунку. Это освежит сюжет.

from matplotlib import pyplot as plt
from builtins import input

fig = plt.figure()
ax = fig.gca()
fig.show()

block = False
for i in range(10):
    ax.plot(i, i, 'ko')
    fig.canvas.draw()
    if block: 
        input('pause : press any key ...')
    else:
        plt.pause(0.1)
plt.close(fig)
person user2660966    schedule 05.01.2014
comment
Это сделало меня на шаг ближе. Когда я запускаю ваш код выше, он открывает фигуру в начале выполнения и рисует окончательный график только в конце выполнения (вместо того, чтобы точка появлялась каждый раз, когда я нажимаю «Ввод»). Я запускаю Python 2.7 в пауке на Windows 7, если это имеет какое-либо значение. - person kjgregory; 06.01.2014
comment
Я не знаю. Я тестировал его как на Linux, так и на Windows 7, и он работает. Это может быть связано с вашей версией matplotlib. Я считаю, что синтаксис может меняться в разных версиях. Я использую matplotlib 1.2.0 - person user2660966; 06.01.2014
comment
Я обнаружил, что если вы делаете там plt.pause(), это дает фигуре возможность перерисовать перед продолжением выполнения. Другие методы вставки ожидания не делают этого. - person kjgregory; 12.11.2015