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を通す。
(まだダメ)