問題を簡単に調べた後、より賢明な答えがここにあります。
まず、それを仮定しましょう
from matplotlib import pylab
pylab.plot(range(10), range(10))
pylab.show()
プロットを「保持」しません。つまり、プログラムが終了する前にほとんど表示されません。その場合、呼び出しpylab.show()
はインタラクティブモードで実行されていると想定されるため、この関数が呼び出された後も実行を継続する他のプロセスが進行中です。これが当てはまらないため、Pythonが終了し、プロット表示も終了します。さて、これを解決するための最初のアプローチは、次のようにpylab.show
してブロックを強制することです。
pylab.show(block=True)
pylab.show
それでも、インタラクティブモードで実行していると仮定した理由はわかりません。その仮定を確認するために、次のコードを実行して実験してください
import matplotlib
print matplotlib.is_interactive()
これがTrueと表示された場合、それはデフォルト設定がに設定されていることを意味しますinteractive: True
。どの構成がそれであるかを確認するには、その構成へprint matplotlib.matplotlib_fname()
のパスを見つけてください。それを開き、パラメータの値を確認しinteractive
ます。
ここで、構成を変更したくない場合は、別の解決策を提案します。
import matplotlib
from matplotlib import pylab
if matplotlib.is_interactive():
pylab.ioff()
pylab.plot(range(10), range(10))
pylab.show()
したがって、メソッドmatplotlib
を呼び出す前に何かをレンダリングする必要があると考える状況はありません。show
最後に、これらのソリューションの中で最も恐ろしいのは、以下の使用pylab.pause
または同等のものです。
from matplotlib import pylab
pylab.ion() # Force interactive
pylab.plot(range(10), range(10))
pylab.show() # This does not block
pylab.pause(2**31-1)