回答:
これはmatplotlibの質問であり、ユーザーに表示されないバックエンド、たとえば「Agg」を使用することでこれを回避できます。
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.savefig('/tmp/test.png')
編集:プロットを表示する機能を失いたくない場合は、インタラクティブモードをオフにし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()
close()
and show()
コマンドについて説明します。これで問題が解決するはずです。あなたが発見したように、その場でバックエンドを変更することはサポートされていません。
plt.plot()
は、対話モードがオンの場合に呼び出すとすぐにipythonの図がプロットされるため、plt.ioff()は図の画面のちらつきを抑えるのに重要です。インタラクティブモードをオフにすると、プロットの表示がまで延期されますplt.show()
。ipythonノートブックを使用しているため、インタラクティブモードの扱いは異なります。
matplotlib.use('Agg')
一人でトリックを行いました。私は、任意の必要はありませんでしたplt.show()
か、plt.ioff()
すべての私のコードで。
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)
、で図形を閉じると表示されません。
plt.ioff
私が得ますRuntimeWarning: More than 20 figures have been opened...
。plt.close
解決しました。
ioff