matplotlibで$DISPLAYが未定義の際に怒られた場合の対応

ssh経由でリモートログインしていて,matplotlibを使った可視化のスクリプトを実行した際に下記のエラーが出た

_tkinter.TclError: no display name and no $DISPLAY environment variable

今回はプロットした結果をGUIを出すコードではなく,ファイルに出力するコードだったのだが関係なく出るらしい.

対策 その1

/etc/matplotlibrc で以下のように変更する

- backend : TkAgg

+ backend : Agg

これによりmatplotlibのデフォルトバックエンドがTkAggから変更される

対策 その2

matplotlibrc はユーザーディレクトリにもある模様

おそらくファイルが存在してないので作る

vi ~/.config/matplotlib/matplotlibrc

backend : Agg #この行を追記

今回はこれで解決

対策 その3(未検証)

調べたらソースに書き加える方法もある模様

import matplotlib

Force matplotlib to not use any Xwindows backend.

matplotlib.use('Agg')

(参考)エラー全文

$ python plot3d.py

/usr/local/lib/python2.7/dist-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.
warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')
Traceback (most recent call last):
File "plot3d.py", line 55, in <module>
  Plot()
File "plot3d.py", line 31, in Plot
  fig = plt.figure()
File "/usr/local/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 527, in figure
  **kwargs)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 84, in new_figure_manager
  return new_figure_manager_given_figure(num, figure)
File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 92, in new_figure_manager_given_figure
  window = Tk.Tk()
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1767, in __init__
  self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

コメント(0)

コメントを投稿する