pythonのプロット作成ライブラリといえば、Matplotlib
が有名ですが、デフォルト設定では日本語は表示できません!
そこで、今回は…
Matplotlib
で日本語を表示しようとしたら文字化けした!- 日本語を表示するには、何を設定すればいいの?
という方向けに、
Matplotlib
で日本語を表示する方法- 使用できるフォントのチェック方法
を紹介していきます。
追加のインストールなしで、フォントの設定を変更するだけの方法を紹介したいと思います。
(Windowsでの設定方法ですが、同じような手順でMacやLinuxでも対応できるかと思います。)
Matplotlibで日本語を表示するには?
Matplotlib
のデフォルト設定では日本語を表示できず、▯▯▯と表示されてしまいます。
例として次のグラフで、タイトル、軸ラベル、グラフ内テキスト、凡例を日本語で指定してみます。
import matplotlib.pyplot as plt
import numpy as np
# 二次曲線の作成
x = np.linspace(-3,3)
y = x**2
# 二次曲線のプロット作成
plt.plot(x, y, label="二次曲線")
# タイトル・軸ラベル表示
plt.title("グラフタイトル")
plt.xlabel("x軸ラベル名")
plt.ylabel("y軸ラベル名")
# グラフ内テキスト表示
plt.text(0, 4,"テキスト例")
# 凡例表示
plt.legend()
plt.show()
見事に日本語だけ▯▯▯になりました。
これは、デフォルトのフォントでは日本語を表示できないためです。
デフォルトのフォントを確認してみます。
# フォントファミリーの確認
print( plt.rcParams['font.family'] )
# ['sans-serif']
# フォントファミリー内のフォントの確認
print( plt.rcParams['font.sans-serif'] )
# ['DejaVu Sans', 'Bitstream Vera Sans', 'Computer Modern Sans Serif', 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', 'Arial', 'Helvetica', 'Avant Garde', 'sans-serif']
# ↑日本語を表示できないらしい
日本語を表示できるフォント(日本語フォントと呼ぶことにします)に設定する必要があります。
今回はフォントを日本語フォントに設定する方法厳選3選を紹介します。
- テキスト表示毎に
fontname
を指定 rcParams
でフォントを変更- matplotlibrcファイルを書き換え
それぞれ次のようなメリットデメリットがあるので、状況に合わせて適切な方法を選びましょう!
方法 | メリット | デメリット |
---|---|---|
①fontname を指定 |
テキストごとに個別設定可能 | 個別設定するのがめんどう |
② rcParams 変更 |
スクリプト冒頭で一括設定可能 | 毎回設定するのがめんどう (①ほどではない) |
③ matplotlibrc書き換え | 一度設定したら半永久的(?)にOK! | 設定ファイルの書き換えなので、 他の人がスクリプトだけ見たら混乱するかも |
ちなみに、私は手間も少なく、後から見ても設定がわかる②が好きです。
- 【参考】軸ラベルの設定については次の記事で紹介しています。
使用できるフォントを確認
まずは、自分の環境で使用できるフォントを確認しましょう。
とは言っても、Windows環境であれば、多くの場合、次のフォントは使用可能だと思います。
'MS Gothic'
'MS Mincho'
'Meiryo'
確認するのが面倒な人は、とりあえずこれらのフォントを指定してみるのがおススメです。
実際に自分の環境で使用できるフォントを確認したい場合は、次のスクリプトで出力可能です。
import matplotlib
fonts = set([f.name for f in matplotlib.font_manager.fontManager.ttflist])
print(fonts)
# {'HoloLens MDL2 Assets', 'MV Boli', 'Segoe Print',…以下略
環境によって100~200個のフォントが出てきます。
この中からゴシックや明朝など日本語が表示できそうなフォントを選んで使用しましょう。
どのフォントが良いかわからない場合は、次のコードで"日本語"
の表示可否を確認できます。
# フォントを全て読み込み
fonts = set([f.name for f in matplotlib.font_manager.fontManager.ttflist])
# 描画領域のサイズ調整
plt.figure(figsize=(10,len(fonts)/4))
# フォントの表示
for i, font in enumerate(fonts):
plt.text(0, i, f"日本語:{font}", fontname=font)
# 見やすいように軸を消す
plt.ylim(0, len(fonts))
plt.axis("off")
plt.show()
▯▯▯になっていなければ、"日本語"
が表示できたということですね。
- 【参考】描画領域Figureの設定については次の記事で紹介しています。
fontnameを指定
テキストを表示するたびにキーワード引数で
fontname = "日本語フォント"
を指定する方法です。
例として、タイトルと軸ラベル、グラフ内テキストにそれぞれ'MS Mincho'
, 'MS Gothic'
, 'Meiryo'
を指定してみます。
import matplotlib.pyplot as plt
plt.plot()
plt.title("グラフタイトル", fontname = 'MS Mincho')
plt.xlabel("x軸ラベル名", fontname ='MS Gothic')
plt.ylabel("y軸ラベル名", fontname ='MS Gothic')
plt.text(0.5, 0.5,"テキスト例", fontname="Meiryo")
plt.show()
ただし、凡例の場合は、テキストのプロパティを辞書型で渡す必要があるので注意が必要です。
- NG:
plt.legend(fontname = "日本語フォント")
- OK:
plt.legend(prop = {"family" : "日本語フォント"})
plt.plot(x, y, label="二次曲線")
plt.title("グラフタイトル", fontname = 'MS Mincho')
plt.xlabel("x軸ラベル名", fontname ='MS Gothic')
plt.ylabel("y軸ラベル名", fontname ='MS Gothic')
plt.text(0, 4,"テキスト例", fontname="Meiryo")
plt.legend(prop = {"family" : "Meiryo"})
plt.show()
- 【参考】グラフ内テキストの設定については次の記事で紹介しています。
rcParamsを設定
スクリプト内で使用するフォントを、日本語フォントに一括変更する方法です。
スクリプトの初めの方で、次のパラメータを設定します。
plt.rcParams['font.family'] = '日本語フォント'
'MS Gothic'
を指定した例を紹介します。
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = "MS Gothic"
plt.plot()
plt.title("グラフタイトル")
plt.xlabel("x軸ラベル名")
plt.ylabel("y軸ラベル名")
plt.show()
一度実行すると、それ以降スクリプト内では日本語フォントが使用されるようになります。
matplotlibrcファイルを書き換え
Matplotlib
の設定ファイルmatplotlibrcを書き換える方法です。
事前に書き換えを行うとスクリプト内でフォントを指定する必要がなくなります。
日本語フォントをずっと使いたい方にはおススメです。
設定用ファイルmatplotlibrcの場所は、次のスクリプトで確認できます。
import matplotlib
matplotlib.matplotlib_fname()
# ファイル場所例⇒'C:\Users\ユーザー名\AppData\Local\Continuum\anaconda3\lib\site-packages\matplotlib\mpl-data\matplotlibrc'
このフォルダ内のmatplotlibrcファイルを、メモ帳などで開いて次の行を書き換えます。
- 書き換え前:
#font.family : sans-serif
- 書き換え後:
font.family : MS Gothic
MS Gothic
の部分は、自分で使用したい日本語フォントにします。
また、文頭の#
を消し忘れないように注意しましょう。
次のようにフォント指定なしで、日本語が表示されるようになります。
import matplotlib.pyplot as plt
import numpy as np
# 二次曲線の作成
x = np.linspace(-3,3)
y = x**2
# 二次曲線のプロット作成
plt.plot(x, y, label="二次曲線")
# タイトル・軸ラベル表示
plt.title("グラフタイトル")
plt.xlabel("x軸ラベル名")
plt.ylabel("y軸ラベル名")
# グラフ内テキスト表示
plt.text(0, 4,"テキスト例")
# 凡例表示
plt.legend()
plt.show()
Matplotlib日本語化のまとめ
今回はMatplotlib
で日本語を表示するための設定方法を紹介しました。
- テキスト表示毎に
fontname
を指定 rcParams
でフォントを変更- matplotlibrcファイルを書き換え
それぞれメリットデメリットがあるので、状況にあった方法を選びましょう!
もっとMatplotlib
を自由自在に操作したい!という方へのおススメコンテンツはこちらです!
Twitter@YutaKaでは、ほぼ毎日pythonに関する情報を発信しています。
気楽にツイートしているので、気軽にフォローしてください!