YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

Matplotlib 日本語の表示方法|簡単にいろんな日本語フォントを使う方法

pythonのプロット作成ライブラリといえば、Matplotlibが有名ですが、デフォルト設定では日本語は表示できません。

そのため、次のような問題に直面している人も多いと思います:

  • Matplotlibで日本語を表示しようとしたら文字化けした!
  • 日本語を表示するには、何を設定すればいいの?

そこで、この記事では簡単な方法から様々な状況に対応できる方法まで、詳しく手順を解説していきます。

  • Matplotlibで日本語を表示する方法
  • すぐに使用できる日本語フォントのチェック方法
  • 任意の日本語フォントを追加して使用する方法

Windowsでの設定方法ですが、同じような手順でMacLinuxでも対応できるかと思います。

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']
# ↑日本語を表示できないらしい

ここで表示されたデフォルトのフォントが日本語に対応していないことが、日本語を表示できない原因です。

日本語を表示できるフォント(日本語フォント)に変更する必要があります。

今回はフォントを日本語フォントに設定する方法について、以下の方法を紹介します。

  1. 外部ライブラリをインストールして設定
  2. システムフォント内の日本語フォントを使用
    • テキスト表示毎にfontnameを指定
    • プログラム冒頭でrcParamsでフォントを変更
    • matplotlibrcファイルを書き換え
  3. 外部の日本語フォントファイル(.ttfファイル)を適用

  4. 【参考】plt.plot()でのグラフ描画については、次の記事で詳しく解説しています。

≫Matplotlib plt.plot徹底解説 | 基本操作を総まとめ!
Matplotlibのplt.plotを使用したグラフを作成、グラフの見た目変更、タイトルや軸の設定など基本事項について徹底解説!!この記事を読めば、plt.plotで手軽に手早く簡単に、キレイなグラフ作成可能に!?
www.yutaka-note.com/entry/matplotlib_pyplot
 

外部ライブラリをインストールする方法

追加のライブラリjapanize-matplotlibをインストールする方法です。

japanize-matplotlibをインストールすると、プログラム冒頭でjapanize_matplotlibimportするだけで日本語表示できるようになります。

この方法の特徴は次の通りです。

  • メリット:
    • imoportするだけでOK
  • デメリット:
    • 追加ライブラリのインストールが必要 ※pipのみ対応、conda不可
    • IPAexゴシックのみ対応

importするだけなのは便利ですが、pipにしか対応していないのでAnaconda環境の方は注意しましょう。

pipでインストールする場合は、ターミナルで以下のコマンドを実行します。

pip install japanize-matplotlib

Anaconda環境にインストールする場合は、pipcondaが干渉する可能性があるので、専用の仮想環境を作成した方が無難です。

次のコマンドで仮想環境を作成、仮想環境をアクティベートしてから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に日本語フォントを適用しましょう。

  1. システムフォント内の日本語フォントの確認
  2. 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 plt.figure()を使う理由|FigureとAxesの関係を把握しよう
Matplotlibでグラフを描くとき「FigureとかAxesとかMatplotlib独特の単語が多くてよくわからない」、「Figureを作った後、結局どうやってプロットすればいいの?」という方のために、FigureとAxesの関係性を図解!FigureにAxesを追加する方法厳選3パターンを解説します!覚えておきたいFigureの設定・操作(サイズ変更、レイアウト調整など)も画像・サンプルコード付きで解説!
www.yutaka-note.com/entry/matplotlib_figure
 

日本語フォントの指定方法

使用できるフォントが判明したら、次のいずれかの方法でMatplotlibのフォントを変更します。

  1. テキスト表示毎にfontnameを指定
  2. rcParamsでプログラム内で使用するフォントを変更
  3. matplotlibrcファイルを書き換え

それぞれ次のようなメリットデメリットがあるので、状況に合わせて適切な方法を選びましょう。

設定方法 メリット デメリット
fontnameを指定 テキストごとに個別設定可能 個別設定に手間がかかる
rcParams変更 スクリプト冒頭で一括設定可能 毎回設定するのがめんどう
(①ほどではない)
matplotlibrc書き換え 一度設定したら半永久的にOK 設定ファイルの書き換えのため、
スクリプトを見ただけでは変更点がわからない

私は手間も少なく、後から見ても設定がわかる②が好きです。

  • 【参考】軸ラベルの設定については次の記事で紹介しています。
≫Matplotlib 軸周り完璧マスターガイド | 軸・軸目盛・目盛り線の設定
Matplotlibで大変なのが軸周りの設定!グラフの「この要素」を変更するには、「どのメソッド」を使えばいいのかわからない…。という方のために、Matplotlibの軸・目盛り・目盛り線の設定について総まとめしました!これで軸周りの設定がだいぶ楽になります。軸周り完ぺきマスターガイド!
www.yutaka-note.com/entry/matplotlib_axis
 
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()

次のように、各要素に日本語フォントが適用されます。

  • 【参考】グラフ内テキストの設定については次の記事で紹介しています。
≫Matplotlib plt.textよく使うもの徹底解説|テキスト表示をマスター!
グラフ内にテキストでコメントを記入することってよくありますよね?グラフにコメントがあると、グラフの大事な部分を強調して説明できます。この記事では、matplotlibでグラフ内にテキストを表示する方法、テキストの見た目の変更方法について図解・サンプルコード付きで解説しています!
www.yutaka-note.com/entry/2020/01/08/080413
 

ただし、凡例の場合は、テキストのプロパティを辞書型で渡す必要があるので注意が必要です。

  • 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()

次のように凡例も適切に日本語で表示されます。

  • 【参考】凡例の設定方法については次の記事で紹介しています。
≫Matplotlib plt.legend() | 凡例の位置とスタイル設定完璧ガイド!
Matplotlibでは、デフォルトでは凡例は表示されません。「凡例(legend)を表示するにはどうしたらいいの?!」「凡例の位置や見た目の設定方法がわからない!」という方向けに、「凡例を表示する関数plt.legend()の使い方」「引数で位置や見た目を簡単に設定する方法」を紹介していきます。自分の作りたい凡例を作れるようになりましょう!
www.yutaka-note.com/entry/matplotlib_legend
 
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ファイルを適用していきます。

  1. fontManagerにフォントを追加
  2. rcParam or fontnameでフォントを適用

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は奥の深いモジュールですが、なかなかわかりにくい部分もあります…。

そこで、グラフの作成方法、種類変更、凡例、タイトルの設定など網羅的にわかりやすく整理した記事を作りました。ぜひ参考にしてみてください。

≫【初心者向け】Matplotlibの特徴と使い方をわかりやすく解説!
脱初心者のためのMatplotlibマスターガイドです。そもそもどういう流れでプロットするのか?どんな種類のグラフが描けるのか?日本語設定は?タイトルや軸の設定は?オブジェクト指向って何?そんな疑問を解決します!この記事で、脱Matplotlib初心者を目指そう!
www.yutaka-note.com/entry/matplotlib_guid
 

また、データ分析初心者の方にはこちらの記事もおススメです。

私がこれまで勉強してきた経験をもとに考えたおススメの勉強本の紹介記事です。

何から始めて、どうやってレベルアップしていけばいいのか、初心者の方にぜひおススメしたい本を紹介しました。

≫独学でデータ分析を勉強するオススメ学習本
独学でのpythonデータ分析勉強に役立ったおススメ書籍を紹介していきます。業務でそれなりにデータ分析を行えるまで、いろいろな試行錯誤をしてきましたが、もし自分が今ゼロから勉強する立場ならどうするのがいいのか考えてみました。以下では、入門書、個別モジュール用、実践用の3つの視点でおススメ本を紹介していきます。
www.yutaka-note.com/entry/data_analysis