Ubuntu 18 のGUIなし環境での話です。
いまさら感はあるし、それほど流行らない使い方だけど、何度か調べてだんだん面倒になってきたので、自分が腑に落ちる形でまとめる。
GUIを使っていないときに、よく怒られる。
_tkinter.TclError: no display name and no $DISPLAY environment variable
対処方法1: システム側の設定を変える
システム管理者で、かつバックエンドがシステム共通でよい場合は、
/etc/matplotlibrc の backend を Agg 変える。
インストールの仕方によっては、設定箇所が異なるかもしれない。
対処方法2: ユーザ側の設定でどうにかする
システム管理者でないか、バックエンドが個人の嗜好による場合は、次のように環境変数を設定した状態で Pythonプログラムを動かせばよい。
MPLBACKEND=Agg; export MPLBACKEND
対処方法3: プログラム側の設定でどうにかする
システム側のバックエンドを変えることができなかったり、システム依存、つまり、動かすシステムにより挙動が変わってしまうプログラムにしたくない場合は、こんなコードを差し込む。
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot