Matplotlibで日本語を使用する方法

日本語表示できない問題

Matplotlibでは、日本語を扱えるフォントが指定されていない場合に日本語を含んだプロットを出力すると、文字化け(◻︎)が表示されてしまいます。

plt.figure()
plt.title("てすと")

日本語フォントをダウンロード

日本語を表示するには、日本語を扱うことのできるフォントをインストールする必要があります。
今回はみんな大好きメイリオをインストールします。

まずはフォントファイルをダウンロードします。

$ wget https://www.dropbox.com/s/zb7lub5c3zc8xgm/meiryo.lzh

ダウンロードしたファイルはlzh形式なので、対応するために「lhasa」をインストールし、解凍します。

$ sudo apt-get install lhasa
$ lha x meiryo.lzh                                                                     (data_analysis)
meiryo.ttc      - Melted   :  ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
meiryob.ttc     - Melted   :  oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

フォントを規定のディレクトリに移す

解凍して出てきた.ttcファイルを、~/.fonts または /usr/share/fonts/以下に移します(ユーザー間で使用するか否かによって決めましょう)。
chmodで読み取り・実行権限も付けておきます。

$ sudo mkdir /usr/share/fonts/meiryo
$ sudo mv meiryo.ttc meiryob.ttc /usr/share/fonts/meiryo
$ sudo chmod 755 /usr/share/fonts/meiryo -R

インストールされたことを確認

fc-listでインストール済みのフォントを一覧表示できます。

$ fc-list | grep Meiryo                                                                    (data_analysis)
/usr/share/fonts/meiryo/meiryob.ttc: Meiryo,メイリオ:style=Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,ボールド,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
/usr/share/fonts/meiryo/meiryob.ttc: Meiryo,メイリオ:style=Bold Italic,Negreta cursiva,tučné kurzíva,fed kursiv,Fett Kursiv,Έντονα Πλάγια,Negrita Cursiva,Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,Grassetto Corsivo,ボールド イタリック,Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,Negrito Itálico,Полужирный Курсив,Tučná kurzíva,Fet Kursiv,Kalın İtalik,Krepko poševno,Lodi etzana
/usr/share/fonts/meiryo/meiryo.ttc: Meiryo,メイリオ:style=Italic,Cursiva,kurzíva,kursiv,Πλάγια,Kursivoitu,Italique,Dőlt,Corsivo,イタリック,Cursief,Kursywa,Itálico,Курсив,İtalik,Poševno,Etzana
/usr/share/fonts/meiryo/meiryo.ttc: Meiryo,メイリオ:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,レギュラー,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta

キャッシュファイルを削除

キャッシュファイルの格納場所はmatplotlib.get_cachedir()で取得することができます。

import matplotlib
matplotlib.get_cachedir()
## '/home/kimoton/.cache/matplotlib'

フォントを更新する際にはこのディレクトリをまるっと削除します。

$ rm -rf ~/.cache/matplotlib

フォントを設定してプロット

plt.rcParams['font.family']に使用したいフォント名を指定することで、明示的にフォントを使用することができます。

plt.rcParams['font.family'] = 'Meiryo'
plt.figure()
plt.title("てすと")

デフォルトのフォントを変更

デフォルトのフォントを変更してしまいたい場合、matplotlibの設定ファイルを編集する必要があります。
まず下記により、matplitlibの設定ファイルを探します。

import matplotlib
matplotlib.matplotlib_fname()
## '/home/kimoton/.config/matplotlib/matplotlibrc'

このファイルを開くと、249行目にフォントを指定している箇所があります。 コメントアウトされていますが、インストール仕立てはsans-serifとなっています。ここでfont.family : Meiryoを指定します。

.
.
#font.family  : sans-serif
.
.

.
.
#font.family  : sans-serif
font.family  : Meiryo
.
.

すると、plt.rcParams明示的にフォントを指定しなくてもメイリオが使用されるようになります!

plt.rcParams['font.family'] = 'Meiryo'
plt.figure()
plt.title("てすと")