Help us understand the problem. What is going on with this article?

seaborn日本語表示設定

More than 1 year has passed since last update.

目的

Pythonで使うseabornのチャートを日本語表示できるようにする。

実行環境

実行環境は以下の通り。

Python version 3.5.3 |Anaconda custom (64-bit)| (default, May 15 2017, 10:43:23) [MSC v.1900 64 bit (AMD64)]
Pandas version 0.20.1
Matplotlib version 2.0.2
Seaborn version 0.7.1

現状の課題

matplotlibでは既定フォントがDejaVu Serifになっており、日本語を表示しようとしても文字化けしてしまう。また、多くの日本語フォント(.ttc)に対応していない。

解決方法

1. 使用可能なフォント一覧を表示

以下のコードを実行し、現在使用可能なフォント一覧を表示する。

import matplotlib.font_manager
print([f.name for f in matplotlib.font_manager.fontManager.ttflist])

実行結果は下記の通り。この中に日本語対応フォントがあればそれを使用する。自分の場合はなかったため、新たにフォントを追加する必要がある。

['DejaVu Sans Mono', 'STIXSizeTwoSym', ..., 'Berlin Sans FB', 'Niagara Engraved']

2. 日本語フォントのダウンロード

matplotlibで使用可能な日本語フォントをダウンロードする。
matplotlibでは.ttf, .otfファイルをサポートしている。使用可能なフォントは下記のとおり。

ダウンロードしzipファイルを解凍後、インストールする。

3. matplotlib設定変更

フォントをインストールしただけではmatplotlibのデフォルトフォントとして使用できないため、matplotlib設定ファイルを書き換え、デフォルトのフォントを変更する。
matplotlib設定ファイルの場所は次のコードで確認できる。

import matplotlib
print(matplotlib.matplotlib_fname())

実行結果

C:\Users\Username\Anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc

~mpl-data\matplotlibrc をテキストエディタで開き、以下の部分を変更する。
デフォルトではDejaVu Sansになっている。

#font.sans-serif     : DejaVu Sans, 

変更後

#font.sans-serif     : IPAPGothic, DejaVu Sans, 

4. seaborn設定変更

次に、C:\Users\Username\Anaconda3\Lib\site-packages\seaborn\rcmod.pyをテキストエディタで開き、以下の部分を変更する。

83行目付近

def set(context="notebook", style="darkgrid", palette="deep",
        font="IPAPGothic", font_scale=1, color_codes=False, rc=None):

193行目付近

"font.family": ["IPAPGothic"],

194行目付近

"font.sans-serif": ["Arial", "Liberation Sans","Bitstream Vera Sans", "IPAPGothic"],

cache削除

matplotlibはC:\Users\Username\.matplotlib\fontList.py3k.cacheを参照するため、~mpl-data\matplotlibrcを変更しただけではフォントは変更されない。

matplotlibをimportする前に、.matplotlib\fontList.py3k.cacheを削除する。

結果

seabornで描画したグラフが日本語表示される。

課題

  • matplotlib, seabornをアップデートするたびに設定し直さなければならない。

参考にしたリンク

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away