2009-11-14 139 views
2

我有一些測光孔的地塊數據,我想他們繪製在XY圖的腳本。我正在用python 2.5使用matplotlib.pyplot。退出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

當我嘗試運行你的程序時,情節閃爍到屏幕上,程序引發了一個類型錯誤:無法迭代,因爲數據數組中有一些NONE – 2009-12-19 11:45:07

+0

對,有一個錯字。我修復了它,它現在應該可以工作。 – tom10 2010-01-18 15:20:00