IPythonノートブック内に表示せずに、ファイルに図を作成する必要があります。この点に関して、IPython
とmatplotlib.pylab
の相互作用については明確ではありません。しかし、pylab.savefig("test.png")
を呼び出すと、test.png
に保存されることに加えて、現在の図が表示されます。大量のプロットファイルの作成を自動化する場合、これは望ましくないことがよくあります。または、別のアプリによる外部処理用の中間ファイルが必要な場合。
これがmatplotlib
またはIPython
ノートブックの質問かどうかはわかりません。
これはmatplotlibの質問であり、ユーザーに表示されないバックエンドを使用することでこれを回避できます。 「Agg」:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.savefig('/tmp/test.png')
EDIT:プロットを表示する機能を失いたくない場合は、 インタラクティブモード をオフにして、plt.show()
のみを呼び出しますプロットを表示する準備ができたら:
import matplotlib.pyplot as plt
# Turn interactive plotting off
plt.ioff()
# Create a new figure, plot into it, then close it so it never gets displayed
fig = plt.figure()
plt.plot([1,2,3])
plt.savefig('/tmp/test0.png')
plt.close(fig)
# Create a new figure, plot into it, then don't close it so it does get displayed
plt.figure()
plt.plot([1,3,2])
plt.savefig('/tmp/test1.png')
# Display all "open" (non-closed) figures
plt.show()
plt.ioff()
またはplt.show()
は必要ありません(%matplotlib inline
を使用する場合)。 plt.ioff()
なしで上記のコードをテストできます。 plt.close()
には不可欠な役割があります。これを試してください:
%matplotlib inline
import pylab as plt
# It doesn't matter you add line below. You can even replace it by 'plt.ion()', but you will see no changes.
## plt.ioff()
# Create a new figure, plot into it, then close it so it never gets displayed
fig = plt.figure()
plt.plot([1,2,3])
plt.savefig('test0.png')
plt.close(fig)
# Create a new figure, plot into it, then don't close it so it does get displayed
fig2 = plt.figure()
plt.plot([1,3,2])
plt.savefig('test1.png')
このコードをiPythonで実行すると、2番目のプロットが表示され、plt.close(fig2)
を最後に追加すると、何も表示されません。
結論としてplt.close(fig)
で図を閉じると、表示されません。