matplotlibのバックエンドの設定に関するエラー
matplotlibをインストールするとき、backendをaggに指定してしまったらしい。そのため、以下のスクリプト(グラフを描いてウィンドウで表示するだけ)を実行すると、エラーになる。
import matplotlib import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) temp1 = [1, 2, 3, 4, 5] temp2 = [1, 3, 4, 6, 8] ax.plot(temp1, temp2, 'k') plt.show()
エラー内容は、
>>> show() /usr/local/lib/python2.6/site-packages/matplotlib/backends/__init__.py:41: UserWarning: Your currently selected backend, 'agg' does not support show(). Please select a GUI backend in your matplotlibrc file ('/usr/local/lib/python2.6/site-packages/matplotlib/mpl-data/matplotlibrc') or with matplotlib.use() (backend, matplotlib.matplotlib_fname()))
backendがAggだとウィンドウが開かないみたい。これを回避するために、スクリプト中に使用するbackendを明記することにする。
import matplotlib matplotlib.use('WXAgg') import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) temp1 = [1, 2, 3, 4, 5] temp2 = [1, 3, 4, 6, 8] ax.plot(temp1, temp2, 'k') plt.show()
こうすると今度は別のエラーが...。
import matplotlib.pyplot as plt File "/usr/local/lib/python2.6/site-packages/matplotlib/pyplot.py", line 95, in <module> new_figure_manager, draw_if_interactive, show = pylab_setup() File "/usr/local/lib/python2.6/site-packages/matplotlib/backends/__init__.py", line 25, in pylab_setup globals(),locals(),[backend_name]) File "/usr/local/lib/python2.6/site-packages/matplotlib/backends/backend_wxagg.py", line 23, in <module> import backend_wx # already uses wxversion.ensureMinimal('2.8') File "/usr/local/lib/python2.6/site-packages/matplotlib/backends/backend_wx.py", line 45, in <module> raise ImportError(missingwx) ImportError: Matplotlib backend_wx and backend_wxagg require wxPython >=2.8
wxPythonは、2.8.12.0を使っているので、「wxPython >= 2.8」は満たしているはず。何がエラーになっているか確かめるため、backend_wx.pyの45行目を見てみる。すると、
import wxversion
でImportErrorになる。
PYTHONPATHにwxversion.pycがあるディレクトリを定義して、再実行すると、今度は下のダイアログが表示される。
どうしていいか分からないので、もう一度、matplotlibのインストールを注意深くやり直すことに。setup.cfgファイルの中で、「backend=WXAgg」と明示的に定義したあとに、
$ python setup.py build (rootでなくても実行できる) $ python setup.py install (rootでなくては実行できない)
を実行する。でも、rootになると、「import wx」に失敗してwxPythonがインストールされていないと見なされてしまう。これがたぶん大元の原因だ。これを修正する。
rootでないとき、「import wx」でどこのファイルを読んでいるかを確認。
>>> import wx
>>> wx.__file__
ここで示されたディレクトリに(rootのときの)PYTHONPATHを通す。
(まだダメ)