matplotlibのデフォルトのフォントを変更する

前の記事でmatplotlibで日本語を表示できるフォントをインストールしましたので、
この記事では実際にそのフォントを使う方法を書いておきます。

最初に、デフォルトのフォントのままだと、グラフがどのように表示されるのかを見ておきましょう。


import matplotlib.pyplot as plt
# デフォルトの設定を確認
print(plt.rcParams["font.family"]) # => ['sans-serif']
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10),range(10), label="データ1")
ax.plot(range(10),range(0,20,2), label="データ2")
ax.set_title("タイトル")
ax.set_xlabel("x軸のラベル")
ax.set_ylabel("y軸のラベル")
ax.legend()
plt.show()

こちらのコードを実行した結果がこの画像です。日本語文字が豆腐のようになります。

これを回避する方法の一つは実行するたびにフォントを指定することです。
このように、font.familyを指定することで、日本語の文字も豆腐にならず表示されます。


import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "IPAexGothic"

このように指定したあとに、上と同じプログラムを実行すると、下図のように正しく日本語が表示されます。

ただし、これは毎回書くのは結構面倒です。たった1行なのに。
そこで、対応としてmatplotlibの設定ファイルでフォントを指定します。

最初に下記のコードを実行して、設定ファイルの場所を確認します。


>>> import matplotlib
>>> print(matplotlib.matplotlib_fname()) 

環境によって結果は変わりますが、自分の場合は下記の場所にありました。
/Users/<ユーザー名>/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc

このmatplotlibrcのバックアップを取って編集します。
ファイル内に下記の記載があるのでコメントアウトを解除してIPAexGothicを指定します。
元の記述
#font.family : sans-serif
修正後
font.family : IPAexGothic

これで次回以降はフォントの指定をしなくてもmatplotlibで日本語が使えます。

もしうまく表示されない場合はキャッシュファイルを一度削除する必要があります。
matplotlib.get_cachedir()
でキャッシュのディレクトリがわかるので、ここにあるファイルを消して試してみてください。

MacにIPAフォントをインストールする

MacにIPAフォントをインストールする手順のメモです。
データサイエンティストがフォントをインストールする目的はおそらく一つしかないと思うのですが、
この作業の目的は、pythonのグラフ描画ライブラリである、matplotlibで作成したグラフ中で日本語を使うためです。

もともとAppleGothicというのが入っているので、それを使ってもいいのですが、
「ー」や「数」など、かなり使用頻度の高い文字が対応していなかったりするので、IPAのフォントをインストールします。

配布元サイト
ダウンロードページ
インストール方法

それでは順番にやっていきましょう。

最初にダウンロードページからフォントファイルをダウンロードします。
ゴシックの方だけあれば十分ですが、せっかくなので
2書体パック(IPAex明朝(Ver.003.01)、IPAexゴシック(Ver.003.01))
を選びました。

ダウンロードしたzipファイルを解答すると中に次の2ファイルと、ライセンス関係のテキストファイルがあります。
ipaexg.ttf
ipaexm.ttf

この2ファイルを
/Library/Fonts
にコピーしたらインストール完了です。

Mac には、Font Book というアプリケーションがあり、インストールされているフォントを確認できますが、
この中に
IPAexゴシックと、IPAex明朝 というのが登場していれば成功です。
フォントを選択して、[i]マークを押すと、詳細な情報が見れます。
この中の、PostScript名 に入っている
IPAexGothic や、 IPAexMincho が、matplotlibに設定するときの名前なのでメモしておきましょう。