2012-07-13 19 views
7

matplotlibにいくつかの問題が発生しています.... show()で画像を表示するために2つのウィンドウを同時に開くことができません。私はshowを使用して、私は手動でディスプレイを閉じるまで続けません。 scrip内のFigureウィンドウを閉じる方法はありますか?私が好きなmatplotlibからshow()とclose()を使用する

次のコードは実行されません:

import matplotlib.pyplot as plt 
from time import sleep 
from scipy import eye 

plt.imshow(eye(3)) 
plt.show() 
sleep(1) 
plt.close() 
plt.imshow(eye(2)) 
plt.show() 

私は1秒後にクローズする最初のウィンドウを期待した後、第2 1を開くが、私はそれを閉じるまで、ウィンドウは閉じません私自身。私は間違ったことをやっているのですか、それともそうなるのでしょうか?

+0

重複している可能性があります。私はplt.ion()を使用するとき、私は図を拡大するなどのいくつかのリソースを使用することはできません... http://stackoverflow.com/q/9753885/302369 – imsc

+0

確かにこの問題を解決するが、窓(私は窓を動かすことさえできません)... – xarles

答えて

11

plt.show()はブロックの機能です。

本質的に、2つのウィンドウを同時に開くには、2つの図形を作成し、最後にplt.show()を使用して表示する必要があります。事実、一般的な経験則では、プロットを設定し、plt.show()は最後に行うことです。だからあなたの場合

fig1 = plt.figure(figsize=plt.figaspect(0.75)) 
ax1 = fig1.add_subplot(1, 1, 1) 
im1, = plt.imshow(eye(3)) 

fig2 = plt.figure(figsize=plt.figaspect(0.75)) 
ax2 = fig2.add_subplot(1, 1, 1) 
im2, = plt.imshow(eye(2)) 

plt.show() 

あなたはaxes(ax2)を使用してプロットを切り替えることができます。

私は、プロット関数がなぜブロックされているのか、それが別の質問の答えにどのように使用できるのかを示す包括的な例をまとめました:https://stackoverflow.com/a/11141305/1427975

+0

ありがとうございます。しかし、私のスクリプトでは、私は100のプロットを1つずつデモしようとしています。私はおそらくそれらをすべて最後にplt.show()することを選択しませんでした。私は1つのプロットを表示したい、おそらく1秒間一時停止してから、手動でクローズするのではなくスクリプトで自動的にクローズし、次に100回繰り返して次のプロットを繰り返し表示します。 編集:私はすべての上にplt.ion()を試しました。はい、プロットが現れ、1つずつ閉じます。ただし、Figureウィンドウには何も表示されず、すべて白です。 – StayFoolish

1

私はPyScripterとPython 2.7を使用していて、手作業で数字を閉じるまではすべてplt.show()の実行をブロックするという問題がありました。

Pythonエンジンを「リモート(Wx)」に変更すると、plt.show()の後にスクリプトが実行されるため、plt.close()で図を閉じることができました。