2014-01-05 5 views
8

내가하려는 일은 상당히 단순한 것 같지만 시간을 벌어서 일을 시작하려고합니다. 나는 imshow를 사용하여 이미지를 그린 다음 새 데이터가 도착할 때 주기적으로 이미지를 다시 그립니다.어떻게 파이썬의 matplotlib을 사용하여 이미지를 다시 그릴 수 있습니까?

이걸로 시작했습니다

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) 대신 전화했거나 set_data() 이후에 figure.show()을 사용해 보았습니다.

답변

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

이렇게하면 좀 더 가까이 다가 갈 수 있습니다. 위의 코드를 실행하면 실행 시작시 그림이 열리 며 실행이 끝날 때만 최종 그림이 그려집니다 (반환 할 때마다 점이 나타나지 않고). 필자는 Windows 7에서 파이썬 2.7을 스파이더에서 실행 중입니다. – kjgregory

+0

잘 모르겠습니다. 나는 리눅스와 윈도우 7 모두에서 그것을 테스트했으며 작동한다. 이것은 matplotlib의 버전에서 온 것일 수 있습니다. 구문이 다른 버전간에 변경 될 수 있다고 생각합니다. matplotlib 1.2.0을 사용하고 있습니다. – user2660966

+0

plt.pause()를 수행하면 실행을 계속하기 전에 다시 그릴 수있는 기회가 있다는 것을 알았습니다. 대기를 삽입하는 다른 방법은이를 수행하지 않습니다. – kjgregory