Matplotlibで日本語表示

matplotlibで日本語表示

題記の件、苦戦しましたので過程をメモしておきます。まずは下記をご覧ください。

import matplotlib.pyplot as plt
plt.xlabel("あ")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)

上記はX軸に「あ」と表示させようとしただけなのですが、エラーが出ました。受け取ったものはasciiコードではないと怒られています。ちなみに、日本語でなければ以下のように動きます。

import matplotlib.pyplot as plt
plt.xlabel("a")

f:id:Rosyuku:20150824011146p:plain

原因調査

そこで以下のようなコマンドを打ってみました。

type("a")
Out: str
type("あ")
Out: str

どちらも同じstr型なので、単純に日本語であることがダメなようです。そこでGoogle先生の力を借りて「Pyplot 日本語」等のキーワードで検索。以下を満足しなければダメなそうです。

  1. ユニコード形式で渡すこと。
  2. フォント形式を指定すること。

対策適用

まず、1から実施してみましょう。ユニコード形式で渡すためには文字列を囲む記号の前にuを付ければいいそうです。

import matplotlib.pyplot as plt
plt.xlabel(u"あ")

f:id:Rosyuku:20150824011858p:plain
エラーがでなくなりました。ただし、表示は□になっていて表示できていません。次に2を実施します。フォント形式を指定するためには以下の処理を加えればいいようです。ここでは仮に、MSゴシックのフォントを割り当てています。

import matplotlib.pyplot as plt
import matplotlib.font_manager
fp = matplotlib.font_manager.FontProperties(fname="C:\Windows\Fonts\msgothic.ttc")
plt.xlabel(u"あ", fontproperties=fp)

f:id:Rosyuku:20150824012156p:plain
これで日本語が表示できるようになりました。

参考

pandasのdataframe型のcolumnsを当てて読みだすときなど、str型の変数を渡したいときは、decodeすれば動きます。

import matplotlib.pyplot as plt
import matplotlib.font_manager
fp = matplotlib.font_manager.FontProperties(fname="C:\Windows\Fonts\msgothic.ttc")
a = "あ"
plt.xlabel(a.decode('utf_8'), fontproperties=fp)

f:id:Rosyuku:20150824012156p:plain
これでようやくグラフが書けそうです。





コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA