リモート環境でmatplotlib.pyplot.plot
を実行
DISPLAY
変数がないリモート環境でmatplotlib.pyplot.plot
を実行しようとすると
RuntimeError: Invalid DISPLAY variable
のような例外が出てしまいます。次の2パターンのいずれかで対策できます。
import matplotlib
import os
if "DISPLAY" is not in os.environ:
matplotlib.use("Agg")
from matplotlib import pyplot
以上の方法がよく採用されますが、isort
などパッケージのソート順をいじるツールなどと相性が悪いです。次のように書けば、追加の記載なしでisort
などが問題なく使えます。ただし、程度の多少はわかりませんが、オーバーヘッドはあります。
from matplotlib import pyplot
import os
if "DISPLAY" is not in os.environ:
pyplot.switch_backend("Agg")
図を複数保存
図を複数保存する際にもトラップがあります。次のpyplot.close()
を書かないと2つ目以降のグラフが以前plot
したグラフの上に書かれてしまいます。savefig
はshow
と違ってキャンバスを消してくれません。+忘れないようにしましょう。
windows = (scipy.signal.hamming, scipy.signal.hann, scipy.signal.blackman)
for window in windows():
pyplot.plot(window(256))
pyplot.savefig(window.__name__ + ".svgz")
pyplot.close()