2009-11-14 3 views
2

일부 광도계 애 퍼처의 데이터를 플롯하는 스크립트를 가지고 있는데 이것을 xy 플롯에 플롯하려고합니다. Python 2.5에서 matplotlib.pyplot을 사용하고 있습니다.matplotlib.pyplot animation을 정상적으로 종료 하시겠습니까?

입력 데이터는 약 500 개의 파일에 저장되고 읽혀집니다. 나는 ...이 데이터를 입력하는 가장 효율적인 방법은 아니다하지만 또 다른 문제가 있다고 알고

예제 코드 : 500 개 이상의 파일이있는 것처럼

import matplotlib.pyplot as plt 

xcoords = [] 
ycoords = [] 

# lists are populated with data from first file 

pltline, = plt.plot(xcoords, ycoords, 'rx') 

# then loop populating the data from each file 

for file in filelist: 
    xcoords = [...] 
    ycoords = [...] 

pltline.set_xdata(xcoords) 
pltline.set_ydata(ycoords) 
plt.draw() 

, 나는 때때로을 닫아야 할 것 플로팅 중간에 애니메이션 창. 줄거리 코드는 작동하지만 아주 우아하게 종료하지는 않습니다. 플롯 창은 닫기 버튼을 클릭해도 응답하지 않으며 그 중 Ctrl+C을 사용해야합니다.

누구든지 스크립트가 실행되는 동안 애니메이션 창을 닫는 방법을 찾는데 도움이 될 수 있습니까? (일련의 파이썬 추적 오류보다 훨씬 우아합니다.)

답변

2

데이터를 업데이트하고 루프에서 그리는 경우이를 중단 할 수 있어야합니다. 여기 예제 (즉, 고정 원을 그리고 그 둘레 선으로 이동)입니다 : 나는 실행을 깰 수 있다고 추가로 확인하기 위해 time.sleep(.01) 명령에 넣어

from pylab import * 
import time 

data = [] # make the data 
for i in range(1000): 
    a = .01*pi*i+.0007 
    m = -1./tan(a) 
    x = arange(-3, 3, .1) 
    y = m*x 
    data.append((clip(x+cos(a), -3, 3),clip(y+sin(a), -3, 3))) 


for x, y in data: # make a dynamic plot from the data 
    try: 
     plotdata.set_data(x, y) 
    except NameError: 
     ion() 
     fig = figure() 
     plot(cos(arange(0, 2.21*pi, .2)), sin(arange(0, 2.21*pi, .2))) 
     plotdata = plot(x, y)[0] 
     xlim(-2, 2) 
     ylim(-2, 2) 
    draw() 
    time.sleep(.01) 

을,하지만 내 테스트에서 (리눅스를 실행) 그것은 필요하지 않았다.

+0

프로그램을 실행하면 화면에 플롯이 깜박이고 프로그램에 유형 오류가 발생합니다. 데이터 배열에 일부 NONE이 있기 때문에 유형이 반복 가능하지 않습니다. –

+0

바로 오타가있었습니다. 나는 그것을 고쳤고 이제는 효과가있다. – tom10