Python3でmatplotlibを使おうとしたらハマったので解決法の備忘録
MacbookProを買い、もう2ヶ月ほどが経とうとしています。 あっという間にMacに慣れ、その辺のMACerよりは使いこなせるようになって来たんじゃないかと思います。でもやっぱり10年近くWindowsを使っていたのでWindowsが体に馴染みますな。。
MacにはWindowsにはない良いところが沢山あるし、クソな所もまあある。それはWindowsも同じで、結局使う人次第なんだなとつくづく思います。 OS批判をしている人は基本的には単に使いこなせていないか、使いこなすのが面倒だという人でしょう。
本題に入ろうか。
実験データをプロットするためにMac版のOffice Excelを使ってたのだがこれがマジでクソすぎる。てかMac版Officeが全体的にクソすぎで笑うしかない。Mac民がMicrosoftを蔑むのもこれを見たら仕方ない気もする。そんなレベル。
と、見事に序盤の発言が転覆している訳で。
そんな訳で、Excelには見切りをつけてPythonからGnuplotなりMatplotlibを使ってデータをプロットすることにした。
MacにはデフォルトでPython2.7がインストールされているが、やはり最新のPython3を使いたいのでインストールする。
本当の本題
環境は以下の通り。
MacOS 10.13 High Sierra Python3(3.7.0)
Pythonのインストール手順
なんでエラーが起きたのか今後の為に一応インストール手順を記します。
homebrewのインストール
homebrewでpython3をインストール
homebrewでpyenvをインストール
pyenvのコマンドを使えるようにパスを通す
python3系のバージョンを選択してインストール
インストールしたpythonのバージョンに切り替え
pip3を使って諸々のライブラリ(numpy, matplotlibなど)をインストール
てな感じです。この辺を参考にしました。 hajipro.com いやあ、Unix系の環境構築の楽さが沁みる。Windowsだったら倍の時間かかってただろう。 この辺はやっぱりMacが強い。
謎のエラー
と言うことで、早速グラフをプロットしてみようと以下のコードを実行してみた。
import matplotlib.pyplot as plt import numpy as np # データ生成 x = np.linspace(0, 10, 100) y = x + np.random.randn(100) # プロット plt.plot(x, y, label="test") # 凡例の表示 plt.legend() # プロット表示(設定の反映) plt.show()
すると以下のエラーを吐き出した。
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/UserName/.pyenv/versions/3.7.0/lib/python3.7/site-packages/matplotlib/pyplot.py", line 115, in <module> _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup() File "/Users/UserName/.pyenv/versions/3.7.0/lib/python3.7/site-packages/matplotlib/backends/__init__.py", line 62, in pylab_setup [backend_name], 0) File "/Users/UserName/.pyenv/versions/3.7.0/lib/python3.7/site-packages/matplotlib/backends/backend_macosx.py", line 17, in <module> from matplotlib.backends import _macosx RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.
いやあ、これが原因が全然わからない。 しかし、TracebackとかRuntimeErrorで調べるとバックエンドの問題が発生しているそうな。僕には分からないけど。
解決法
$ python -c "import matplotlib;print(matplotlib.matplotlib_fname())"
とターミナルに打ち込んで、matplotlibrcという名のファイルを探す。 このファイルをエディタで開き、35~40行目あたりにある
backend : macosx
を
backend : TkAgg
に変更すると良いそうだ。 実際にやってみたら治った。 めでたしめでたいし。
参考文献
Pythonでmatplotlibをimportするとエラーが出る場合の対処策(Mac) - Qiita
pyenvとvirtualenvで環境構築した時にmatplotlib.pyplotが使えなかった時の対処法 - Qiita