Matplotlibで日本語を表示しようとすると以下のように文字化けしてしまいます。

>>> import matplotlib.pyplot as plt
>>> x = [1, 2, 3, 4, 5]
>>> y = [1, 4, 9, 16, 25]
>>> plt.plot(x, y)
>>> plt.title("二乗値のグラフ")
>>> plt.show()

いわゆる「豆腐文字」と呼ばれるものです。

tofu font

シェルには以下のような警告(Warning)が文字数の分だけ表示されます。

.....
Warning (from warnings module):
  File "C:\Users\Ichiro\AppData\Local\Programs\Python\Python37-32\lib\site-packages\matplotlib\backends\backend_agg.py", line 180
    font.set_text(s, 0, flags=flags)
RuntimeWarning: Glyph 12501 missing from current font.

今回はMatplotlibの日本語文字化けの簡単な解決方法をご紹介します。ここでは、matplotlib3.1.0 + Windows10で確認しています。matplotlibはAnacondaではなくpipでインストールしています。

簡単な解決方法

弊社内ではフォントファイルを読み込むことで対応していましたが、もっと簡単でわかりやすい方法があります。以下のようにfontnameに日本語のフォント名を指定するだけです。

>>> plt.plot(x, y)
>>> plt.title("二乗値のグラフ", fontname="MS Gothic")
>>> plt.show()

ここでは、Windowsで「MSゴシック(MS Gothic)」を指定しています。

matplotlib japanese font

軸のラベルも同様に指定できます。

>>> plt.plot(x, y)
>>> plt.xlabel("X軸", fontname="MS Gothic")
>>> plt.ylabel("Y軸(二乗値)", fontname="MS Gothic")
>>> plt.show()

matplotlib label

使えるフォントの調べ方

Windowsでは、通常は以下のような一般的なフォントが使えます。

MS GothicMS MinchoHGGothicMHGMinchoBHGGothicEHGMinchoEなど、

どのようなフォント名が使えるかは、以下のファイルをメモ帳で開いて確認できます(ファイル名の部分はmatplotlibのバージョンで異なります)。

 C:/Users/<ユーザ名>/.matplotlib/fontlist-v310.json

以下のnameの部分を、フォント名(fontname)として使用できます。

fonts list

その他の使用例

以下のヒストグラムの作成では、Windows10で「遊ゴシック(Yu Gothic)」を指定しています。

データ分析で最初に行うことは、項目(変数)ごとに平均、標準偏差、ヒストグラムを知ることです。なかでも、ヒストグラムは「値の分布傾向」を視覚的に把握できるので重宝します。 例えば、今まで左右対称な…