TclError: 表示名がない、$DISPLAY環境変数の解決策もない。
matplotlibを使用して画像を生成する際、以下のエラーが発生する場合があります。
_tkinter.TclError: no display name and no $DISPLAY environment variable
matplotlibのバックエンドの設定に問題があることが原因です。
バックエンド
matplotlibは様々な使用例や出力形式を想定しています。python のコマンドラインから対話的に matplotlib を使い、コマンドを入力するとプロットウィンドウがポップアップするものもあります。matplotlib を wxpython や pygtk などのグラフィカルユーザークロスに埋め込んで、リッチなアプリケーションを構築することもできます。数値シミュレーションからポストスクリプトイメージを生成するバッチスクリプトや、画像を動的に生成するウェブアプリケーションサービスでの matplotlib の利用があります。
これらのユースケースをすべてサポートするために、matplotlib は、それぞれバックエンドと呼ばれる異なる出力を指向することができます。バックエンドは、グラフィックスを生成するために舞台裏ですべての作業を行います。バックエンドには、インタラクティブとノンインタラクティブの2種類があります。インタラクティブは、pygtk、wxpython、tkinter、qt4、macosxで使用され、ユーザーインターフェースバックエンドとしても知られています。Non-interactiveはPNG, SVG, PDF, PSなどで使われ、ハードコピーバックエンドとしても知られています。
バックエンドの設定は4つあり、優先順位の高い順に並べられ、4つの設定が衝突した場合は、優先順位の高い設定が優先されます。
1. matplotlibrcファイル内のバックエンド設定、例.
backend : Agg
2. 現在のシェルまたはスクリプトにMPLBACKEND環境変数を設定します。これは、たとえ現在の作業ディレクトリに matplotlibrc ファイルがあったとしても、環境変数によって上書きされます、例えば。
#Current shell
export MPLBACKEND=Agg
#Only for the current script test.py
MPLBACKEND=Agg python test.py
3. 単一のスクリプトのバックエンドを設定することで、スクリプトの実行時に -d コマンドライン引数を使用することもできますが、-d 引数はコマンドライン引数を解析するスクリプトと衝突することがあるので、これはお勧めしません、例えば。
python test.py -dbackend Agg
4. スクリプトが特定のバックエンドに依存している場合、例えば use() 関数を使用することができます。
import matplotlib
matplotlib.use('Agg')
use() 関数を使用する場合、matplotlib.pyplot をインポートする前に行う必要があり、そうでなければ use 関数は無効となります。use 関数を使用すると、別のバックエンドを使用したい場合、コードの変更が必要になります。したがって、明示的に use() を呼び出すことは、必要なければ避けるべきです。
ソリューション
解決策は、適切な バックエンド で、matplotlibのデフォルト設定を変更したくない場合は、2つ目の方法を使うことができます。
その他
matplotlib は、以下の順序で matplotlibrc ファイルを探します。
1. 現在の作業ディレクトリ。通常、他の場所に適用したくない特別なカスタマイズのために使用します。
2. $MATPLOTLIBRC/matplotlibrc です。
3. ユーザーディレクトリ、LinuxとFreeBSDでは.config/matplotlib/matplotlibrc(または$XDG_CONFIG_HOME/matplotlib/matplotlibrc)にあるかも知れません。他のプラットフォームでは、.matplotlib/matplotlibrcにあるかもしれません。
4. Pythonインストールディレクトリのsite-packages/matplotlib/mpl-data/matplotlibrc。このファイルはmatplotlibをインストールするたびに上書きされるので、カスタマイズを保存したい場合は、このファイルを特定のユーザーディレクトリに移動させる必要があります。
関連
-
[解決済み】twinx と twiny を一緒に使う matplotlib (twinxy のようなもの)
-
[解決済み] matplot の各極軸に xv ラインを追加する方法
-
[解決済み] matplotlib で swarm プロットを作成する方法
-
[解決済み] pad_inches=0 と bbox_inches="tight" は、宣言された figsize よりも小さいプロットを作成します。
-
[解決済み] matplotlib でプロットをクリアするために cla()、clf() または close() をいつ使うか?
-
matplotlib のエラーです。TypeError: -でサポートされていないオペランドタイプ: 'str' および 'str'
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例