タダです.
現在,ベータ版である Pyhon3 エンジニア検定データ分析試験を受験するために指定書籍で勉強を進めています.自前の Mac で環境構築し勉強中に Matplotlib のグラフが描画できない問題が起こり,その問題に対処したので対応内容をまとめます.
なお,環境は以下になります.Python の実行環境は venv の仮想環境で作っていました.
$ sw_vers ProductName: Mac OS X ProductVersion: 10.14.6 BuildVersion: 18G95 $ python -V Python 3.6.8 $ cat requirements.txt ~中略~ matplotlib==2.2.2
問題の事象
Matplotlib の次のコードを作ったので実行してみたところエラーがでました.
import matplotlib.pyplot as plt x = [1,2,3] y = [2,4,9] plt.plot(x,y) plt.title('Test-Graph') plt.show()
エラー文の内容が以下のようなものでした.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 1 import matplotlib.pyplot as plt
と記載があるため,Matplotlib の backend
に関する指定が怪しそうという推測をしました.
$ python dev-matplotlib.py Traceback (most recent call last): File "dev-matplotlib.py", line 1, in <module> import matplotlib.pyplot as plt File "/xxxx/xxxx/pydataenv/lib/python3.6/site-packages/matplotlib/pyplot.py", line 115, in <module> _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup() File "/xxxx/xxxx/pydataenv/lib/python3.6/site-packages/matplotlib/backends/__init__.py", line 62, in pylab_setup 1 Provides a MATLAB-like plotting framework. [backend_name], 0) File "/xxxx/xxxx/pydataenv/lib/python3.6/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 1 import matplotlib.pyplot as plt
変更前の設定の確認
Matplotlib の設定ファイルの場所を確認してみると,最初は仮想環境のsite-packages
ディレクトリ配下に指定となっており,確認してみたところbackend
の指定はmacosx
となっていました.ググると,site-packages
ディレクトリ配下をいじるのはよくない対応という記述を見つけたため ~/.matplotlib/matplotlibrc
を変更して対応します.
$ python -c "import matplotlib;print(matplotlib.matplotlib_fname())" /xxxx/xxxx/pydataenv/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc $ cat /xxxx/xxxx/pydataenv/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc | grep backend ~中略~ backend : macosx
設定変更方法について
設定変更は簡単です. 以下のように対応してみて再度グラフを描画することができました.
$ echo "MacOSX" > ~/.matplotlib/matplotlibrc $ cat ~/.matplotlib/matplotlibrc backend : MacOSX
再描画
Matplotlib のbackend 設定
余談ですが, Matplotlib のbackend
設定はいくつかオプションがあります.今回設定した MacOSX グラフを描画できなかったので最初は設定自体が誤りかと思ったのですが,設定ファイルの場所が変えることで動作することを確認できたので設定値として適切です.利用方法に合わせてbackend
を設定していきましょう.
Select the backend used for rendering and GUI integration. Parameters ---------- backend : str The backend to switch to. This can either be one of the standard backend names, which are case-insensitive: - interactive backends: GTK3Agg, GTK3Cairo, MacOSX, nbAgg, Qt4Agg, Qt4Cairo, Qt5Agg, Qt5Cairo, TkAgg, TkCairo, WebAgg, WX, WXAgg, WXCairo - non-interactive backends: agg, cairo, pdf, pgf, ps, svg, template or a string of the form: ``module://my.module.name.
参考URL
[https://github.com/matplotlib/matplotlib/blob/98507c076c29fea1a70711f4dc7df32cdd7ec3c7/lib/matplotlib/init.py#L1207-L1241:embed:cite]
まとめ
Mac の Matplotlib のグラフ描画できない問題への対処方法をまとめました.同じ問題に遭遇した方の何か参考になれば幸いです!