pythonのプロット作成ライブラリといえば、Matplotlib
が有名ですが、デフォルト設定では日本語は表示できません。
そのため、次のような問題に直面している人も多いと思います:
Matplotlib
で日本語を表示しようとしたら文字化けした!- 日本語を表示するには、何を設定すればいいの?
そこで、この記事では簡単な方法から様々な状況に対応できる方法まで、詳しく手順を解説していきます。
Matplotlib
で日本語を表示する方法- すぐに使用できる日本語フォントのチェック方法
- 任意の日本語フォントを追加して使用する方法
Windows
での設定方法ですが、同じような手順でMac
やLinux
でも対応できるかと思います。
- Matplotlibで日本語を表示するには?
- 外部ライブラリをインストールする方法
- システムフォント内の日本語フォントを使用
- 外部の日本語フォントを適用する方法
- オススメ|matplotlibとデータ分析の勉強方法
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()
見事に日本語だけ"▯▯▯"
になりました。
これは、Matplotlib
デフォルトのフォントでは日本語を表示できないためです。
Matplotlib
のデフォルトのフォントを確認してみましょう。
# フォントファミリーの確認
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']
# ↑日本語を表示できないらしい
ここで表示されたデフォルトのフォントが日本語に対応していないことが、日本語を表示できない原因です。
日本語を表示できるフォント(日本語フォント)に変更する必要があります。
今回はフォントを日本語フォントに設定する方法について、以下の方法を紹介します。
- 外部ライブラリをインストールして設定
- システムフォント内の日本語フォントを使用
- テキスト表示毎に
fontname
を指定 - プログラム冒頭で
rcParams
でフォントを変更 matplotlibrc
ファイルを書き換え
- テキスト表示毎に
-
外部の日本語フォントファイル(.ttfファイル)を適用
-
【参考】
plt.plot()
でのグラフ描画については、次の記事で詳しく解説しています。
外部ライブラリをインストールする方法
追加のライブラリjapanize-matplotlib
をインストールする方法です。
japanize-matplotlib
をインストールすると、プログラム冒頭でjapanize_matplotlib
をimport
するだけで日本語表示できるようになります。
この方法の特徴は次の通りです。
- メリット:
imoport
するだけでOK
- デメリット:
- 追加ライブラリのインストールが必要 ※
pip
のみ対応、conda
不可 - IPAexゴシックのみ対応
- 追加ライブラリのインストールが必要 ※
import
するだけなのは便利ですが、pip
にしか対応していないのでAnaconda環境の方は注意しましょう。
pip
でインストールする場合は、ターミナルで以下のコマンドを実行します。
pip install japanize-matplotlib
Anaconda
環境にインストールする場合は、pip
とconda
が干渉する可能性があるので、専用の仮想環境を作成した方が無難です。
次のコマンドで仮想環境を作成、仮想環境をアクティベートしてからpip
しましょう。
conda create -n 仮想環境名
conda activate 仮想環境名
japanize-matplotlib
をインストールしたら、スクリプト冒頭でimport
するだけで日本語が表示できます。
import japanize_matplotlib
実行例を確認してみましょう。
import matplotlib.pyplot as plt
import japanize_matplotlib
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内でフォントの適用
Windows環境であれば、多くの場合は次のフォントが使用可能です。
- 'MS Gothic'
- 'MS Mincho'
- 'Meiryo'
確認が面倒な人は、上記の中から適当なフォントを使用してしまうのも手だと思います。
システムフォントの確認
次のスクリプトで自分の環境で使用できるフォントを確認できます。
#使用できるフォントの確認
import matplotlib
fonts = set([f.name for f in matplotlib.font_manager.fontManager.ttflist])
print(fonts)
# {'Arial Rounded MT Bold', 'HoloLens MDL2 Assets',…以下略
環境によって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の設定については次の記事で紹介しています。
日本語フォントの指定方法
使用できるフォントが判明したら、次のいずれかの方法でMatplotlib
のフォントを変更します。
- テキスト表示毎に
fontname
を指定 rcParams
でプログラム内で使用するフォントを変更matplotlibrc
ファイルを書き換え
それぞれ次のようなメリットデメリットがあるので、状況に合わせて適切な方法を選びましょう。
設定方法 | メリット | デメリット |
---|---|---|
①fontname を指定 |
テキストごとに個別設定可能 | 個別設定に手間がかかる |
② rcParams 変更 |
スクリプト冒頭で一括設定可能 | 毎回設定するのがめんどう (①ほどではない) |
③ matplotlibrc 書き換え |
一度設定したら半永久的にOK | 設定ファイルの書き換えのため、 スクリプトを見ただけでは変更点がわからない |
私は手間も少なく、後から見ても設定がわかる②が好きです。
- 【参考】軸ラベルの設定については次の記事で紹介しています。
fontnameを指定
テキストを表示する際に、キーワード引数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()
外部の日本語フォントを適用する方法
外部の日本語フォントファイル(.ttfファイル)を適用する方法を紹介します。
この方法を使用すれば、インターネット上のフリーフォントなどが自由に設定できるようになります。
以下では、font_mangager
にフォントを追加して使用する方法を紹介します。
次の手順で、.ttfファイルを適用していきます。
fontManager
にフォントを追加rcParam
orfontname
でフォントを適用
fontManager
にフォントを追加すれば、あとはシステムフォントの使用と同じ方法ですね。
以下は、"./ipam00303/ipam.ttf"
に保存した'IPAMincho'
を適用する例です。
import matplotlib.font_manager as fm
# フォントをfontManagerに追加
FONT_PATH = "./ipam00303/ipam.ttf"
fm.fontManager.addfont(FONT_PATH)
# FontPropertiesオブジェクト生成(名前の取得のため)
font_prop = fm.FontProperties(fname=FONT_PATH)
font_prop.get_name()
# 'IPAMincho'
rcParams
を変更してフォントを適用してみましょう。
plt.rcParams['font.family'] = font_prop.get_name() # 直接フォント名を書いてもOK
# 二次曲線のプロット作成
plt.plot(x, y, label="二次曲線")
# タイトル・軸ラベル表示
plt.title("グラフタイトル")
plt.xlabel("x軸ラベル名")
plt.ylabel("y軸ラベル名")
# グラフ内テキスト表示
plt.text(0, 4,"テキスト例")
# 凡例表示
plt.legend()
# plt.show()
plt.savefig("external_font.png")
無事に外部フォントが適用されました。
オススメ|matplotlibとデータ分析の勉強方法
今回は、Matplotlib
の日本語化方法について、簡単な方法から様々な状況に対応できる方法まで解説しました。
Matplotlib
は奥の深いモジュールですが、なかなかわかりにくい部分もあります…。
そこで、グラフの作成方法、種類変更、凡例、タイトルの設定など網羅的にわかりやすく整理した記事を作りました。ぜひ参考にしてみてください。
また、データ分析初心者の方にはこちらの記事もおススメです。
私がこれまで勉強してきた経験をもとに考えたおススメの勉強本の紹介記事です。
何から始めて、どうやってレベルアップしていけばいいのか、初心者の方にぜひおススメしたい本を紹介しました。