2014-07-15 3 views
2

matplotlib의 draw() 메서드를 사용하여 플롯을 동적으로 업데이트하려고합니다. 나는 단순히 사용하려고 시도했다.Matplotlib draw() 메서드가 아무 것도 수행하지 않음

import matplotlib.pyplot as plt 
import time 

plt.plot(range(10)) 
plt.draw() 

그러나 사실상 아무 것도하지 않는다. 프로그램은 실행하고 플롯을 표시하지 않고 종료됩니다. 쇼 메소드가 백엔드와 함께 플롯 창을 생성 한 다음 업데이트되도록하기 위해 다음 프로그램을 실행했지만, 백엔드가 첫 번째 show 명령으로 플롯을 그리고 이후에 업데이트되지 않는다는 것이 전부입니다. 윈도우가 닫힐 때까지 show() 메소드가 세션을 정지시키고 있다고 생각합니다.

import matplotlib.pyplot as plt 
import time 

plt.plot(range(10)) 
plt.show() 
time.sleep(1) 
plt.plot(range(50)) 
plt.draw() 

저는 Mac OS X의 최신 버전을 실행 중입니다 (2014 년 7 월 15 일 기준). 그래, 그게 효과가 없어. 다음으로 내 기본 설정 ('tkagg')과 다른 백엔드를 사용하려고했습니다. Matplotlib의 대화식 모드 (ion())도 활성화했습니다.

import matplotlib 
matplotlib.use('tkagg') 
import matplotlib.pyplot as plt 
import time 

plt.ion() 
plt.plot(range(10)) 
plt.show() 
time.sleep(1) 
plt.plot(range(50)) 
plt.draw() 

다음으로 show() 및 draw() 메소드가 더 이상 필요하지 않으므로 삭제 한 것 같습니다. 그렇게하면 프로그램이 실행되고 창을 표시하지 않고 닫힙니다.

draw() 메서드가 캔버스를 수정하지 않으면 어떻게 플롯을 동적으로 업데이트 할 수 있습니까? 커맨드 라인에서 파이썬 인터프리터를 사용할 때이 인터랙티브 모드는 작동하지만 "파이썬 myfile.py"파일을 실행하자마자 발생하지 않습니다. 내가 다운로드하고 백만 가지 예제를 시도하고 그들 중 아무도 사실 내 컴퓨터에 음모를 업데이 트 ... 도와주세요 !!

+0

호기심에서 벗어난'MacOSX'를 시도해보십시오. – Ben

+0

@ 벤 나는 그것을 줬다. 그 백엔드는 윈도우가 플롯되도록 허용하지 않습니다 ... –

+0

'ipython'에서 인터랙티브하게 플로팅 할 수 있습니까? – Ben

답변

2
import matplotlib.pyplot as plt 

plt.plot(range(10)) 
plt.show() 
plt.plot(range(50)) 
plt.show() 

위의 작품들. 두 번째 창을 가져 오려면 첫 번째 창을 닫아야합니다. 이는 plt.show()이 차단 기능이기 때문입니다. 창을 실제로 닫을 때까지 프로그램을 차단합니다.

대신에 동일한 창에서 플롯을 사용하려는 경우. 그런 다음 matplotlib에서 대화식 모드를 사용하십시오.

import matplotlib.pyplot as plt 
import time 

plt.ion() 
plt.plot(range(10)) 
plt.draw() 
time.sleep(20) 
plt.plot(range(50)) 
plt.draw() 
time.sleep(20) 

이 방법은 효과가 있지만 컴퓨터에서는 전경에서 플롯 창이 열리지 않습니다. 따라서 OSX에서 창을 찾으려면 위로 스 와이프 동작을 수행하십시오.

+0

물론 작동하지만 내 질문이 아닙니다. 플롯을 제자리에 업데이트하는 것에 대해 이야기하고 있습니다. 혼란을 드려 죄송합니다. –

+0

방금이 답변을 업데이트했습니다. 그것이 효과가 있는지보십시오. – Phani

+0

두 번째 응답이 나를 위해 작동하지 않습니다. 변경 사항없이 코드를 복사/붙여 넣는 것 같습니다. –

관련 문제