Mac でアナコンダなしで matplotlib でグラフ描画する時の日本語を表示できるようにする。
matplotlib とは?
Wikipedia によると、
Matplotlib は、プログラミング言語 Python およびその科学計算用ライブラリ Numpy のためのグラフ描画ライブラリである。
https://ja.wikipedia.org/wiki/Matplotlib
です。
最近、データ分析 (データサイエンス) の勉強を始めたところです。
データサイエンスの勉強 = matplotlib を使ってグラフ描画をやることになったわけですが、pip で matplotlib をインストールしただけでは、グラフのタイトルや凡例に日本語を表示することができません。
この投稿では、MacBook Pro で matplotlib でグラフを描画する時、日本語を表示できるようにした方法 (日本語対応) を記録に残すことにします。
僕は MacBook Pro を使っていますが Anaconda (アナコンダ) は使っていない環境です。
↓ Udemy の【ゼロから始めるデータ分析】ビジネスケースで学ぶ Python データサイエンス入門 で matplotlib を使って学習しています。
日本語表示できず文字化けする
日本語対応がなされていないと、以下のような文字化けをおこします。
この画像は Jupyter Notebook で、matplotlib でグラフ描画したときのものです。グラフのタイトルに「グラフ」と表示したいのですが、文字化けしてしまっているのがわかります。
手順1:まず日本語のフォントを取ってきます。
日本語フォントは何でも良いみたいんなのですが、今回は IPA (独立行政法人情報処理推進機構) のウェブサイト から「IPAex ゴシック」というフォントをダウンロードすることにしました。
上記 IPAex フォント Ver.004.01 のところをクリックしたあと、次のページ ↓ で
IPAex ゴシック (Ver.004.01)、ipaexg00401.zip のところをクリックしてダウンロードしました。
手順2:ダウンロードしたフォントを格納するディレクトリを見つけてそこに置く。
使っている Python のヴァージョンを確認します。
僕が使っているバージョンは 3.7.6 (3.7 系) でした。
このヴァージョン情報を頭に入れたまま、mpl-data というキーワードを元に find コマンドを実行します。
/usr/local/lib/python3.7/site-packages/matplotlib/mpl-data ディレクトリが見つかりました。
もう 1 つ mpl-data ディレクトリが見つかりましたが、それは python 2.7 系と思わえっるディレクトリだったので無視しました。
では、ダウンロードしたフォントを置くディレクトリまで移動していきます。
目的となるディレクトリは、/usr/local/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf です。ここに、ダウンロードした IPAex ゴシックのフォントファイルを持ってきます。
IPAex ゴシックのフォントファイルは Downloads フォルダにダウンロードしてあったので、unzip コマンドで圧縮して、ipaexg.ttf ファイルだけ cp コマンドでコピーしました。
これで IPAex ゴシックのフォントを置くべき場所に置くことができました。
手順3:設定ファイル (matplotlibrc) を修正する。
2 つ上のディレクトリ /usr/local/lib/python3.7/site-packages/matplotlib/mpl-data に移動します。
そこに matplotlibrc というファイルがあり、これが matplotlib の設定ファイルです。
これを vi matplotlibrc で編集します。編集する前にファイルのバックアップをとりました。vi で編集した後 diff コマンドで差分を表示させると、
となりました。
手順4:フォントリストの json ファイルを修正する。
ホームディレクトリに .matplotlib ディレクトリがあるのでそこに移動します。
上記のように fontlist-v310.json という json ファイルがあります。これをコピーしておいてから編集します。僕は vi を使いました。
“ttflist”: [ と書かれた行をサーチし、その下に以下 { から } までの 10 行を追記します。
要は、ダウンロードして格納したフォントのファイルの定義をこのファイル (fontlist-v310.json) にも書いてやる必要があるのです。
vi で編集した後の diff 結果は以下の通り。
文字化けが直ったのを確認した!
直った! ( ・´ー・`)どや