2009-11-14 4 views
2

У меня есть сценарий, который отображает данные некоторых апертур фотометрии, и я хочу их построить в сюжете xy. Я использую matplotlib.pyplot с python 2.5.Выйти из анимации matplotlib.pyplot изящно

Входные данные хранятся в 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() 

Поскольку существует более 500 файлов, я иногда хочу, чтобы закрыть анимационное окно в середине графика. Мой код для работы работает, но он не выходит очень изящно. Окно сюжета не реагирует на нажатие кнопки закрытия, и я должен удалить из него Ctrl+C.

Может ли кто-нибудь помочь мне найти способ закрыть окно анимации во время работы скрипта, пока он выглядит грациозным (более изящным, чем серия ошибок трассировки питона)?

ответ

2

Если вы обновляете данные и выполняете ничью в цикле, вы должны иметь возможность прервать его. Вот пример (который рисует стационарный круг, а затем перемещает линию по периметру):

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) 

я помещал в команде time.sleep(.01) быть очень уверен, что я мог бы сломать бег, но в моих тестах (работает Linux), это не было необходимо.

+0

Когда я пытаюсь запустить вашу программу, график мигает на экране, и программа вызывает ошибку типа: NoneType не повторяется, так как в массиве данных есть некоторые Nones. –

+0

Правильно, была опечатка. Я исправил его, и теперь он должен работать. – tom10

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

  • Нет связанных вопросов^_^