YutaKaのPython教室

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

Matplotlib 日本語の表示方法 厳選3選|最適な方法選んで!

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選を紹介します。

  1. テキスト表示毎にfontnameを指定
  2. rcParamsでフォントを変更
  3. matplotlibrcファイルを書き換え

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

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

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

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

使用できるフォントを確認

まずは、自分の環境で使用できるフォントを確認しましょう。

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

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

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を自由自在に操作したい!という方へのおススメコンテンツはこちらです!

≫Matplotlib inline の謎解明! |「書けと言われたので書いています」から卒業
≫Matplotlib inline の謎解明! |「書けと言われたので書いています」から卒業
Jupyter Notebookでmatplotlibを使用する場合には、インポートする前に%matplotlib inlineと記述します。なぜinlineと入力しているのでしょうか?この記事では、matplotlib inlineの謎について解説していきたいと思います!
www.yutaka-note.com/entry/matplotlib_inline
 
≫Matplotlib plt.textよく使うもの徹底解説|テキスト表示をマスター!
≫Matplotlib plt.textよく使うもの徹底解説|テキスト表示をマスター!
グラフ内にテキストでコメントを記入することってよくありますよね?グラフにコメントがあると、グラフの大事な部分を強調して説明できます。この記事では、matplotlibでグラフ内にテキストを表示する方法、テキストの見た目の変更方法について図解・サンプルコード付きで解説しています!
www.yutaka-note.com/entry/2020/01/08/080413
 
≫Matplotlib color 色の指定 | 一文字指定からカラーマップの使い方まで徹底解説
≫Matplotlib color 色の指定 | 一文字指定からカラーマップの使い方まで徹底解説
伝わるグラフを作るためのポイントはなんでしょうか?いかに視覚的にわかりやすいか、これが大切です。それには重要な要素に色をつけて、視覚的にうったえることが超大切!この記事では、matplotlibでの色の指定方法について、基本から応用まで徹底解説!
www.yutaka-note.com/entry/matplotlib_color
 
≫Matplotlib 軸周り完璧マスターガイド | 軸・軸目盛・目盛り線の設定
≫Matplotlib 軸周り完璧マスターガイド | 軸・軸目盛・目盛り線の設定
Matplotlibで大変なのが軸周りの設定!グラフの「この要素」を変更するには、「どのメソッド」を使えばいいのかわからない…。という方のために、Matplotlibの軸・目盛り・目盛り線の設定について総まとめしました!これで軸周りの設定がだいぶ楽になります。軸周り完ぺきマスターガイド!
www.yutaka-note.com/entry/matplotlib_axis
 
≫Matplotlib 棒グラフを徹底解説|複数系列・積み上げ棒グラフ全てOK
≫Matplotlib 棒グラフを徹底解説|複数系列・積み上げ棒グラフ全てOK
Matplotlibで棒グラフを作成する方法がよくわからない…。 棒グラフで悩むなら、MatplotlibあきらめてExcel使おうかな…。 と思ったことはありませんか?そんな方のために、Matplotlibの棒グラフ作成方法を徹底的に解説しました!複数系列?積み上げ棒グラフ?全部大丈夫!
www.yutaka-note.com/entry/matplotlib_bar
 
≫Matplotlib 散布図を徹底解説!|基本設定からバブルチャートまで
≫Matplotlib 散布図を徹底解説!|基本設定からバブルチャートまで
Matplotlibで散布図を作成する方法がよくわからない…。散布図って何のためにあるの?全部、plt.plotでグラフ作ればよくない?という方のために、「Matplotlibの散布図の作成方法、散布図を応用したデータの可視化例」についてまとめしました!
www.yutaka-note.com/entry/matplotlib_scatter
 
≫Matplotlib 円グラフ作成方法|Excel風グラフ、ドーナツグラフも解説
≫Matplotlib 円グラフ作成方法|Excel風グラフ、ドーナツグラフも解説
Matplotlibで円グラフを作成する方法がよくわからない…。何を設定すれば、自分の描きたい円グラフになるのかわからない!という方のために、「Matplotlibの円グラフ作成方法」、「Excel風の見た目に設定する方法」、「グラフやラベルの設定方法」についてまとめしました!これで自由に円グラフを作成できます!
www.yutaka-note.com/entry/matplotlib_pie
 
≫Matplotlib subplotの使い方徹底図解!|一つの図に複数グラフを描く
≫Matplotlib subplotの使い方徹底図解!|一つの図に複数グラフを描く
Matplotlibで一つの図の中に複数のグラフを並べるにはどうすればいいの?subplotでグラフを並べられるらしいけど、使い方がよくわからない!という方のために、「plt.subplot()の基本的な使い方」を画像付きで解説していきます!plt.subplot()でプロットをキレイに配置して、見やすく人に伝わるグラフを目指しましょう!
www.yutaka-note.com/entry/2020/01/02/232925
 
≫【完全保存版】Matplotlib plt.plot徹底解説 | 基本操作を総まとめ!
≫【完全保存版】Matplotlib plt.plot徹底解説 | 基本操作を総まとめ!
Matplotlibのplt.plotを使用したグラフを作成、グラフの見た目変更、タイトルや軸の設定など基本事項について徹底解説!!この記事を読めば、plt.plotで手軽に手早く簡単に、キレイなグラフ作成可能に!?
www.yutaka-note.com/entry/matplotlib_pyplot
 
≫Matplotlib アニメーション作成入門編 |ArtistAnimation徹底解説!
≫Matplotlib アニメーション作成入門編 |ArtistAnimation徹底解説!
Matplotlibではアニメーションも作成できますが、初めての人には少し複雑です…。「 Matplotlibでアニメーションを描きたいけど、何から始めればいいの?」という方のために、 Matplotlibでアニメーションを超簡単に作成・保存する方法、アニメーション作成用の超基本テンプレを画像・サンプルコード付きで紹介していきます!
www.yutaka-note.com/entry/matplotlib_artist_anim
 
≫Matplotlib FuncAnimation徹底解説|更新用関数はこう作ればいい!
≫Matplotlib FuncAnimation徹底解説|更新用関数はこう作ればいい!
Matplotlibではアニメーションも作成できますが、初めての人には少し複雑です…。「Matplotlibでアニメーションを描きたいけど、よくわからない!」、「FuncAnimationで更新用関数作るって何?意味不明!!」という方のために、FuncAnimationでアニメーションを作成する超基本、更新用関数の作成方法、重要メソッドを画像・サンプルコード付きで紹介していきます!
www.yutaka-note.com/entry/matplotlib_func_anim
 
Matplotlib plt.figure()を使う理由|FigureとAxesの関係を把握しよう
Matplotlib plt.figure()を使う理由|FigureとAxesの関係を把握しよう
Matplotlibでグラフを描くとき「FigureとかAxesとかMatplotlib独特の単語が多くてよくわからない」、「Figureを作った後、結局どうやってプロットすればいいの?」という方のために、FigureとAxesの関係性を図解!FigureにAxesを追加する方法厳選3パターンを解説します!覚えておきたいFigureの設定・操作(サイズ変更、レイアウト調整など)も画像・サンプルコード付きで解説!
www.yutaka-note.com/entry/matplotlib_figure
 
≫Matplotlib plt.subplots()の使い方|FigureとAxesを同時生成!
≫Matplotlib plt.subplots()の使い方|FigureとAxesを同時生成!
Matplotlibでグラフを描くとき「fig, ax = plt.subplots()って、よく見るけど何してるの?」「plt.subplots()の便利な使い方を知りたい! 」という方のために、plt.subplots()でFigureとAxesを作ると何が便利なのか、plt.subplots()の基本的な使い方、覚えておくと便利なplt.subplots()の引数をを図解付きで解説します!
www.yutaka-note.com/entry/matplotlib_subplots
 

Twitter@YutaKaでは、ほぼ毎日pythonに関する情報を発信しています。

気楽にツイートしているので、気軽にフォローしてください!