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()
いわゆる「豆腐文字」と呼ばれるものです。
文字化けすると、シェルには以下のような警告(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の日本語文字化けの簡単な解決方法をご紹介します。この問題解決には様々な方法がありますが、Windowsではこの方法が恐らく最も簡単だと思います。ぜひ参考にしてください。
本記事の目次
タイトルや軸ラベルの場合
タイトルや軸ラベルに日本語を使う場合は、以下のようにキーワード引数を用いてfontname=
に日本語のフォント名を指定するだけです。
>>> plt.plot(x, y)
>>> plt.title("二乗値のグラフ", fontname="MS Gothic")
>>> plt.show()
ここでは、Windowsで「MSゴシック(MS Gothic)」を指定しています。
軸のラベルも同様に指定できます。
>>> plt.plot(x, y)
>>> plt.xlabel("X軸", fontname="MS Gothic")
>>> plt.ylabel("Y軸(二乗値)", fontname="MS Gothic")
>>> plt.show()
凡例(legend)の場合
凡例でも同じようにfontname=
でフォントを指定すると以下のようにエラーになります。
>>> plt.plot(x, y)
>>> plt.legend(["二乗値)"], fontname="MS Gothic")
....
TypeError: __init__() got an unexpected keyword argument 'fontname'
凡例の場合は、以下のようにprop=
にfamily
をキーとする辞書でフォントを指定すると、問題なく日本語を表示できます。
>>> plt.plot(x, y)
>>> plt.legend(["二乗値"], prop={"family":"MS Gothic"})
>>> plt.show()
使えるフォントの調べ方
Windowsでは、通常は以下のような一般的なフォントが使えます。
MS Gothic
、MS Mincho
、HGGothicM
、HGMinchoB
、HGGothicE
、HGMinchoE
など、
どのようなフォント名が使えるかは、以下のファイルをメモ帳で開いて確認できます(ファイル名の部分はmatplotlibのバージョンで異なります)。
C:/Users/<ユーザ名>/.matplotlib/fontlist-v310.json
以下のname
の部分を、フォント名(fontname
)として使用できます。
その他の使用例
以下のヒストグラムの作成では、Windows10で「遊ゴシック(Yu Gothic)」を指定しています。