1. ホーム
  2. python

[解決済み] Xサーバが動作していなくてもmatplotlibのグラフを生成できる [重複] [重複

2022-04-14 18:44:14

質問

Matplotlib は $DISPLAY 環境変数を必要とするようで、これは X サーバーが動いていることを意味します。

ウェブホスティングサービスによっては、Xサーバーセッションの実行を許可していない場合があります。

Xサーバが動作していなくても、matplotlibを使ってグラフを生成する方法はありますか?

[username@hostname ~]$ python2.6
Python 2.6.5 (r265:79063, Nov 23 2010, 02:02:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.egg/matplotlib/pyplot.py", line 270, in figure
    **kwargs)
  File "/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.egg/matplotlib/backends/backend_tkagg.py", line 80, in new_figure_manager
    window = Tk.Tk()
  File "/usr/local/lib/python2.6/lib-tk/Tkinter.py", line 1643, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
>>>

解決方法は?

ニールさんの回答も一つの方法(完全に正しい!)ですが、次の方法もあります。 を呼び出すだけです。 matplotlib.use('Agg') 以前 インポート matplotlib.pyplot を実行し、その後通常通り続行します。

import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))
fig.savefig('temp.png')

バックエンドもAggを使う必要はありません。 その pdf, ps, svg, agg, cairo, gdk バックエンド はすべてX-serverなしで使用することができます。 しかし、Agg バックエンドだけはデフォルトでビルドされる(と思う?)ので、他のバックエンドはあなたの特定のインストールでは有効になっていない可能性が高いです。

別の方法として、バックエンドパラメータを .matplotlibrc ファイルから、自動的に matplotlib.pyplot は指定されたレンダラーを使用します。