私がやろうとしているのは、スクリプトに何かを計算させ、プロットを準備し、既に取得した結果を pylab.figure として表示することです - Python 2 (特に python 2.7) で安定した matplotlib (1.1.1) を使用します。
Python 3 (matplotlib git build ... バージョン 1.2.x を使用した Python 3.2.3) では、これは正常に機能します。簡単な例として (time.sleep() による長い計算をシミュレートする) 考えてみましょう
import pylab
import time
import random
dat=[0,1]
pylab.plot(dat)
pylab.ion()
pylab.draw()
for i in range (18):
dat.append(random.uniform(0,1))
pylab.plot(dat)
pylab.draw()
time.sleep(1)
Python 2 (バージョン 2.7.3 with matplotlib 1.1.1) では、コードはエラーなしで正常に実行されますが、図は表示されません。python2 インタープリターでの試行錯誤の結果、pylab.draw() を pylab.show(); に置き換えることが提案されたようです。これを 1 回実行するだけで明らかに十分です (プロットに変更や追加を行うたびに draw を呼び出すのとは異なります)。したがって:
import pylab
import time
import random
dat=[0,1]
pylab.plot(dat)
pylab.ion()
pylab.show()
for i in range (18):
dat.append(random.uniform(0,1))
pylab.plot(dat)
#pylab.draw()
time.sleep(1)
ただし、これも機能しません。繰り返しますが、きれいに実行されますが、図は表示されません。ユーザーの入力を待っているときにのみそうするようです。これがなぜなのかはわかりませんが、 raw_input() がループに追加されると、プロットが最終的に表示されます
import pylab
import time
import random
dat=[0,1]
pylab.plot(dat)
pylab.ion()
pylab.show()
for i in range (18):
dat.append(random.uniform(0,1))
pylab.plot(dat)
#pylab.draw()
time.sleep(1)
raw_input()
これにより、スクリプトはもちろん、プロットを表示している間、ユーザーの入力を待ち、ユーザーが Enter キーを押すまでデータの計算を続行しません。もちろん、これは意図したものではありません。
これは、異なるバージョンの matplotlib (1.1.1 および 1.2.x) または異なる python バージョン (2.7.3 および 3.2.3) が原因である可能性があります。
上記のスクリプト(最初のスクリプト)がpython 3、matplotlib 1.2.xで行うことを安定した(1.1.1)matplotlibでpython 2で達成する方法はありますか: - データの計算(上記の例では時間がかかります)ループまたは反復関数で time.sleep()) によってシミュレートされ、- (まだ計算中に) 以前の反復で既に計算されたものを表示し、ユーザーが計算を続行するために Enter キーを押し続ける必要がありません。
ありがとう; 助けていただければ幸いです...