VS Code + matplotlib で日本語のグラフを表示する


前回「VS Code で Jupyter を動かしてみる」をやってみましたがグラフ表示の matplotlib での日本語表示がうまくいきませんでした。
いろいろ調べて出来るようになったので記録しておきます。
方法は1つだけではなさそうですが、これでいくことにしました。

1. 環境

OS:Windows 10
VS Code:1.43.2
拡張機能:Anaconda Extension Pack 1.0.1
Pythonインタープリター:3.7.3 64-bit

2. ビフォー

import matplotlib.pyplot as plt

flg, ax = plt.subplots()

x = [1, 2, 3, 4, 5]
y = [3, 6, 4, 8, 5]
labels = ['バナナ', 'パイナップル', 'みかん', 'いちご', 'メロン']
ax.bar(x, y, tick_label=labels, label='好きなフルーツ')
ax.legend()

plt.show()

上のソースを実行したところ、日本語表示したいところが長四角の豆腐になってしまいます。

Jupyter notebook で試してみても状況は同じです。

3. 対応

3-1.フォントファイルの取得

OSにあらかじめインストールされているフォントを使用してもいいのですが、Linuxなどの環境でも同じフォントを使用したいのでIPAexゴシックを使用することにしました。
https://ipafont.ipa.go.jp/ からダウンロードします。

これを解凍してフォントファイル(拡張子 tff)を取得します。

ipaexg.tff は IPAexゴシック
ipaexm.tff は IPAex明朝
です。

3-2.フォントファイルの配置

matplotlibの設定ファイルを探します。

import matplotlib as mpl
print(mpl.matplotlib_fname())

私の環境の場合はここにありました。

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

上記からの相対パスとしての
../fonts/ttf
すなわち

C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\mpl-data\fonts/ttf

にフォントファイル ipaexg.ttf を配置します。

3-3.matplotlib側での設定

C:\Users\<username>\.matplotlib\fontlist-v300.json

を削除します。
キャッシュファイルがあればそれも削除します。

ここでいったん VS Code を再起動しておきます。

4.アフター

最初のソースにフォントを明示的に指定するために

plt.rcParams['font.family'] = 'IPAexGothic'

を挿入します。

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'IPAexGothic'
flg, ax = plt.subplots()

x = [1, 2, 3, 4, 5]
y = [3, 6, 4, 8, 5]
labels = ['バナナ', 'パイナップル', 'みかん', 'いちご', 'メロン']
ax.bar(x, y, tick_label=labels, label='好きなフルーツ')
ax.legend()

plt.show()

うまくいきました。日本語が表示されました。

Jupyter notebook でも試してみます。大丈夫でした。

5.このあとやりたいこと

scikit-learn を用いて分析したデータをグラフにしてみたい。

6.参考にさせていただいたQiitaの先輩

@Kanatani28 さん https://qiita.com/maroKanatani/items/3b080c639395bba7795a
@yniji さん https://qiita.com/yniji/items/3fac25c2ffa316990d0c