Seaborn?
Seaborn とは、Pythonの外部モジュールのひとつで、統計データの可視化を目的として作られています。
公式ページでは、
Seaborn is a Python visualization library based on matplotlib. It provides a high-level interface for drawing attractive statistical graphics.
(SeabornはmatplotlibにもとづくPythonの可視化ライブラリです。魅力的な統計グラフを描くためのハイレベルなインターフェースを提供します。)
と説明されています。要は、matplotlibをかっこ良く、かつ使いやすくするためのライブラリです。
しかし、Seabornはフォントの問題でデフォルトでは日本語をうまく表示することが出来ません1。
import seaborn as sns
sns.plt.plot([0,1], [0,1]); sns.plt.title('tofu - 豆腐')
そこで、日本語を表示できるようにフォントを書き換えたいと思います。
対症療法
一時しのぎとして、「その場で使うフォントを指定する」という方法があります:
sns.set(font='Yu Gothic')
sns.plt.plot([0,1], [0,1]); sns.plt.title('tofu - 豆腐')
しかしこの方法だと、seabornをimportするたびに毎回設定する必要がありますし、何かのタイミングでフォントをデフォルト値に戻される2と、また設定をし直す必要があります。
原因療法?
そもそもseabornのデフォルト値をいじってしまえば問題が解決できるはずです。
順番に見ていこうと思います。
matplotlibにフォントを追加する
seabornはmatplotlibの上で動くので、好きなフォントを使うためにはmatplotlibにフォントを追加する必要があります。
フォントダウンロード
別になんでもいいんですが、今回はIPAexフォントを使うことにします。ダウンロードして解凍すると、ipaexg.ttf
というファイルがあるはずです。
matplotlibの設定ファイルの場所を探してフォントを追加
import matplotlib as mpl
print(mpl.matplotlib_fname())
を実行してみてください。 あなたのmatplotlibが現在参照している設定ファイルのパスが表示されます。 デフォルトでは、python_install_folder\\lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc
です。
matplotlibrc
の存在するフォルダ、つまりmpl-data
の下にあるfonts
フォルダのttf
フォルダに、先ほどダウンロードしたipaexg.ttf
というファイルをコピーしてください。
これでmatplotlibはIPAexフォントを使えるようになります3。
seabornの設定ファイルを書き換える
site-packages
にある、seaborn
フォルダのrcmod.py
をエディタで開いてください。
66-67行目のdef set(context="notebook", ...
をコメントアウトして次の行を追加:
def set(context="notebook", style="darkgrid", palette="deep",
font="IPAexGothic", font_scale=1, rc=None):
さらに、199から201行目あたりにある"font.family": ["sans-serif"]
をコメントアウトして次の行を追加:
"font.family": ["IPAexGothic"],
以上で準備完了です4。Pythonをもう一度立ち上げて確認してみます。
import seaborn as sns
sns.plt.plot([0,1], [0,1]); sns.plt.title('tofu - 豆腐')
ちなみに
import matplotlib as mpl
font_paths = mpl.font_manager.findSystemFonts()
font_objects = mpl.font_manager.createFontList(font_paths)
font_names = [f.name for f in font_objects]
print(font_names)
を実行すると、matplotlibが現在使えるフォントの名前の一覧を吐きます (Default fonts in Seaborn statistical data visualization in iPython)。
1. Windowsでは日本語が表示できませんが、Mac、Linuxはどうなっているのか知りません。もし日本語が表示できないなら同じ方法で解決できるはずです。
2. sns.set()
するとデフォルトに戻される
3. このフォルダは、matplotlibをアップデートすると上書きされる恐れがあるそうです。
4. このフォルダも、Seabornをアップデートすると上書きされそう。