11

matplotlib でいくつかの問題が発生しています... show() で画像を表示するために一度に 2 つのウィンドウを開くことができません。手動で表示します。スクリプト内で図ウィンドウを閉じる方法はありますか?

次のコードは、私が望むように実行されません:

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 番目のウィンドウを開くと思っていましたが、自分で閉じるまでウィンドウは閉じません。私は何か間違ったことをしていますか、それともあるべき姿ですか?

4

2 に答える 2

12

plt.show() はブロッキング関数です。

基本的に、一度に 2 つのウィンドウを開きたい場合は、2 つの Figure を作成し、最後に 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

于 2012-07-14T16:24:47.140 に答える
2

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

plt.show()Python エンジンを「リモート (Wx)」に変更すると、後でスクリプトを実行できることがわかりましたplt.close()

于 2016-02-12T13:29:29.703 に答える