2

いくつかの測光アパーチャのデータをプロットするスクリプトがあり、それらをxyプロットにプロットしたいと思います。私はPython2.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それを終了する必要があります。

誰かが私が優雅に見えながらスクリプトが実行されている間にアニメーションウィンドウを閉じる方法を見つけるのを手伝ってくれますか(一連のPythonトレースバックエラーよりもはるかに優雅です)?

4

1 に答える 1

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を実行)では必要ありませんでした。

于 2009-11-15T04:31:04.697 に答える