Matplotlibでは、標準では日本語対応がされておらず、グラフのタイトルやラベルは英語でしか表記できません。日本語を無理に表示しようとすると、文字化けが発生し、「□□□」のような文字が表示されるだけで、正しく表示できません。
この記事では、Python初心者でも簡単にできる日本語対応の仕方を解説していきます。
対応方法は主に2つがあり、それぞれ環境や目的によってどちらを選択すれば良いかが変わってきます。
対応方法 | メリット | デメリット |
1. MatplotlibのFontPropertiesの利用 | ・pipでのインストールが不要で、すぐに対応できる。 ・フォントを選択することができる。 | ・import文以外にもFontPropertiesの設定を記述する必要がある。 |
2. japanize_matplotlibの利用 | ・import文以外の記述が不要 | ・pipでのインストールが必要になり、Anacondaの環境ではpipでインストールできるようにする必要がある。 ・フォントが「IPAexゴシックフォント」に固定される。 |
この章では、まず追加のインストール不要で簡単に対応でき、ビジネスなど様々な利用局面に応じて必要なフォントを選択できる「1. MatplotlibのFontPropertiesの利用」を説明します。
その上で必要に応じて選択頂けるよう、「2. japanize_matplotlibの利用」も解説していきたいと思います。それぞれ必要な章をご確認ください。
発売数9,000本突破を記念して、今だけ期間限定で87%オフの大セール中!!!
MatplotlibのFontPropertiesの利用による日本語対応
まず、グラフのタイトルやラベルを日本語するには、matplotlibのFontPropertiesをインポートします。
次にFontPropertiesで日本語のフォントを指定して読み込みます。FontPropertiesは、次のように記述します。
主な引数は、
引数 | 必須/任意 | 説明 |
fname | 必須 | フォントの保存場所とファイル名を指定 |
size | 任意 | フォントのサイズを指定。 |
引数fnameは、フォントの保存場所とファイル名を指定します。
例えば、WindowsでMSゴシックを指定する場合は、次のように指定します。
また’msgothic.ttc’がMSゴシックのフォントが入っているファイルになりますので、MS明朝にしたい場合は‘msmincho.ttc’、メイリオは‘meiryo.ttc’、メイリオ太字は‘meiryob.ttc’など、ファイル名を変更していくことになります。
またMac OSで日本語フォント(Osaka)を使う場合は、次のように指定します。
フォントの保存場所が異なる場合は、適宜変更が必要になります。
それでは実際に日本語でグラフのラベルやタイトルを表示してみましょう。ここでは直線のグラフの例を見ていきます。式1として y = 2x + 3を、式2として y = 3x + 1をグラフにします。
以下がそのコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import numpy as np import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties fp = FontProperties(fname=r'C:\WINDOWS\Fonts\meiryob.ttc', size=16) # データ準備 x = np.linspace(0, 10, 5) # 横軸の描画範囲指定 y1 = 2 * x + 3 # 式1 y = 2x + 3より、縦軸の値算出 y2 = 3 * x + 1 # 式2 y = 3x + 1より、縦軸の値算出 # グラフの装飾 plt.title('日本語表示テスト', fontproperties=fp) # タイトル plt.xlabel("x軸", fontproperties=fp) # x軸ラベル plt.ylabel("y軸", fontproperties=fp) # y軸ラベル # グラフの描画 plt.plot(x, y1, label="式 y = 2x + 3") # 式1の描画 plt.plot(x, y2, label="式 y = 3x + 1") # 式2の描画 plt.legend(loc="upper left", prop=fp) # 凡例表示 plt.show() |
背景色を変更した箇所が今回の日本語対応の為に変更した箇所になります。
FontPropertiesクラスで生成されたオブジェクトfpを元に、タイトル、x軸ラベル、y軸ラベルは、引数fontpropertiesにfpを渡し、凡例は引数propにfpを渡すだけです。
コードを実行すると、以下のようなグラフが表示されます。
指定されたメイリオの太字でタイトル、x軸ラベル、y軸ラベル、凡例が表示されるようになりました。
japanize_matplotlibの利用による日本語対応
もう1つの方法として日本語対応されたmatplotlibであるjapanize-matplotlibをインストールして使うという方法があります。
フォントは予め指定されているIPAexゴシックフォントしか利用できませんが、一度インストールすると後はインポートするだけで使えるので非常に便利です。
但し、インストールはpipでしかできず、Anacondaのcondaではインストールできないので、工夫が必要です。
それではまずインストール方法から確認しましょう。
pipでインストールする場合、コマンドラインから以下を入力してください。
pipの詳しい説明は「Pythonでの外部ライブラリの追加インストール方法」を参照ください。
Anacondaを利用されている場合は、condaが利用できませんので、次のコマンドを入力して、AnacondaのインストールされているAnaconda環境の場所を確認します。
次に以下のコマンドでAnaconda環境をactivateします。
するとactivateしたAnaconda環境へpipでインストールできるようになりますので、次のコマンドを入力してください。
以上でインストールが終わりました。
そして、先ほどと同じ式1、式2をグラフにしてみましょう。以下がそのコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import numpy as np import matplotlib.pyplot as plt import japanize_matplotlib # データ準備 x = np.linspace(0, 10, 5) # 横軸の描画範囲指定 y1 = 2 * x + 3 # 式1 y = 2x + 3より、縦軸の値算出 y2 = 3 * x + 1 # 式2 y = 3x + 1より、縦軸の値算出 # グラフの装飾 plt.title('日本語表示テスト', fontsize=14) # タイトル plt.xlabel("x軸", fontsize=14) # x軸ラベル plt.ylabel("y軸", fontsize=14) # y軸ラベル # グラフの描画 plt.plot(x, y1, label="式 y = 2x + 3") # 式1の描画 plt.plot(x, y2, label="式 y = 3x + 1") # 式2の描画 plt.legend(loc="upper left", fontsize=14) # 凡例表示 plt.show() |
背景色を変更した箇所が、今回の日本語対応の為に変更した箇所になります。
最初にjapanize_matplotlib をインストールするだけで終わりです。後はフォントサイズを指定していますが、指定しなくてもOKです。
コードを実行すると、以下のようなグラフが表示されます。
IPAexゴシックフォントでタイトル、x軸ラベル、y軸ラベル、凡例が表示されています。
このようにして、matplotlibでも日本語でタイトルやラベルを表示することができます。