2014-01-05 10 views
8

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

Я начал с этим:

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().

ответ

10

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

from matplotlib import pyplot as plt 

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

for i in range(10): 
    ax.plot(i, i, 'ko') 
    f.canvas.draw() 
    raw_input('pause : press any key ...') 
f.close() 
+1

Это сделало меня ближе. Когда я запускаю свой код выше, он открывает фигуру в начале выполнения и рисует окончательный график только в конце выполнения (вместо того, чтобы каждый раз показывать точку при каждом возврате). Я запускаю python 2.7 в spider на windows 7, если это имеет какое-то значение. – kjgregory

+0

Не знаю. Я тестировал его как на linux, так и на windows7, и он работает. Возможно, это может произойти из вашей версии matplotlib. Я считаю, что синтаксис может меняться между разными версиями. Я использую matplotlib 1.2.0 – user2660966

+0

Я узнал, что если вы делаете plt.pause() там, он дает фигуре возможность перерисовать перед продолжением выполнения. Другие способы вставки ожидания не делают этого. – kjgregory

Смежные вопросы