matplotlibで日本語が文字化けする(□豆腐)ときの対処

結論を先に。matplotlibで日本語が□(豆腐)になるのは、デフォルトのフォントに日本語の字形が含まれていないためです。japanize-matplotlib を入れて import するか、日本語フォントを font.family に指定すれば直ります。

UserWarning: Glyph 12354 (\N{HIRAGANA LETTER A}) missing from current font.

原因

matplotlibの既定フォント(DejaVu Sans など)には日本語のグリフが入っていません。ラベルやタイトルに日本語を使うと、該当文字が表示できず□になります。

対処

  1. 最も簡単なのは japanize-matplotlib を使う方法です。import するだけで日本語フォントが設定されます。
import matplotlib.pyplot as plt
import japanize_matplotlib
plt.plot([1, 2, 3]); plt.title("日本語のタイトル")
  1. 手動で日本語フォントを指定することもできます。環境にあるフォント名を設定します。
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "IPAexGothic"
  1. フォントを入れたのに反映されないときは、matplotlibのフォントキャッシュを削除して再実行します。
import matplotlib
import shutil, os
shutil.rmtree(matplotlib.get_cachedir())

まとめ

  • 原因は既定フォントに日本語グリフが無いこと
  • japanize-matplotlib を import するのが最短
  • 手動なら font.family に日本語フォントを指定
  • 反映されなければフォントキャッシュを削除する