PythonTableauTech Blog 

Matplotlibの日本語文字化けを解消する(Mac編)

はじめに

Pythonでグラフを作成したい場合、グラフ描画ライブラリであるmatplotlibを利用するのが定石となっております。

しかしながら、matplotlibでグラフのタイトル、X軸、Y軸を日本語表記で設定した場合、文字化けが発生し結局英語表記で済ませていることが多いのではないでしょうか。

今回はmatplotlibでグラフを描画する際、グラフのタイトル、X軸、Y軸を日本語表記に指定したとしても文字化けが発生しない方法を2つ紹介します。

なお、今回紹介するのはmac、jupyter notebook環境下での設定方法です。ご留意ください。

実行環境
Python 3.6.5
matplotlib 3.3.4
jupyter notebook

matplotlibのドキュメントサイト

matplotlibで日本語の設定をしない状態でグラフを作成

まずは、グラフの各ラベルを英語表記で指定します。 下記コードをjupyter notebookで入力し実行してください。

%matplotlib inline
import matplotlib.pyplot as plt
 
plt.style.use('ggplot')
x=range(1,10)
y=range(2,20,2)
 
#グラフ描画
plt.plot(x, y, 'o--', color='r', label='Test')
plt.legend(bbox_to_anchor=(0, 1), loc='upper left', borderaxespad=1, facecolor='w')
plt.xlabel('test_x')
plt.ylabel('test_y')
plt.title('Test')

新規のプロットウィンドウに右上がりの直線(一次関数y=2x)を赤いドットラインで描画します。X軸に「test_x」、Y軸に「test_y」、グラフのタイトルと凡例(左上表示)のラベルには「Test」と名前を付けます。

上記コードの実行結果は下図になります。

 

matplotlibの日本語文字化けを解消する(Mac編)_1

英語表記で設定すると問題なく表示できます。

ここで、X軸に「テスト_X」、Y軸に「テスト_y」、グラフのタイトルと凡例のラベルに「テスト」と名前を日本語表記に変更します。下記コードをjupyter notebookで入力し実行してください。

plt.plot(x, y, 'o--', color='r', label='テスト')
plt.legend(bbox_to_anchor=(0, 1), loc='upper left', borderaxespad=1, facecolor='w')
plt.plot(x, y, 'o--')
plt.xlabel('テスト_X')
plt.ylabel('テスト_y')
plt.title('テスト')

上記コードの実行結果は下図となり、日本語部分が「□□□」と文字化けしてしまいます。

matplotlibの日本語文字化けを解消する(Mac編)_2

さて、通称「豆腐」と呼ばれるこの文字化けを解消する方法2つを紹介していきましょう。

日本語文字化け解消の手順その1- 環境設定ファイル(matplotlibrc)を使う方法

使用したい日本語フォントファイルをダウンロードして、matplotlibの環境設定ファイル(matplotlibrc)に使用する日本語フォント情報を直接追記する方法です。これを行うとグラフのフォント設定を都度の実行で使えるので、設定にかかる手間を省くことができます

まず、こちらのサイト(文字情報技術促進協議会)からIPAexフォントをダウンロードしましょう。

リンク先の「IPAサイトからダウンロード」の「IPAexゴシック」のipaexg00401.zipファイルをクリックしてダウンロードしてください。

matplotlibの日本語文字化けを解消する(Mac編)_3

 

ダウンロードしたzipファイルを解凍すると、ipaexg.ttfというファイルがあります。

matplotlibの日本語文字化けを解消する(Mac編) _4

このファイルを、matplotlibのttfフォントのフォルダにコピーします。

$ cp ipaexg.ttf /Users/[user_name]/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf

ターミナルでipaexg.ttfの追加を確認しました。

matplotlibの日本語文字化けを解消する(Mac編)_5

次は環境設定ファイルのmatplotlibrcの編集ですが、どのフォルダに保存されているのでしょうか?以下のコマンドで保存先のパスが確認できます。

import matplotlib
print(matplotlib.matplotlib_fname())

パスは環境によって異なりますが、今回の使用環境では以下のファイルパスになります。

/Users/[user_name]/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc

このパスはオリジナルの環境設定ファイルのものです。なるべく直接のファイル修正はせずバックアップとして残しておき、作業フォルダかユーザー設定用のフォルダにコピーして編集しましょう。

matplotlibでは設定ファイルmatplotlibrcのimport時の参照順が作業フォルダ、設定用のフォルダ、オリジナルのインストール先フォルダと決まっています。使い方に応じて柔軟にmatplotlibrcの参照先を変更することができます。(参考:matplotlibドキュメントの「The matplotlibrc file」)

https://matplotlib.org/stable/tutorials/introductory/customizing.html?highlight=mpl%20data

今回はユーザー設定用のフォルダにmatplotlibrcをコピーして実行します。ユーザー設定用のコンフィグフォルダのパスは以下コマンドで確認できます。

開いたら「font.family : IPAexGothic」という文字列を追加してください。

import matplotlib
print(matplotlib.get_configdir())

以下のようにコンフィグフォルダのパスが出力されます。

/Users/[user_name]/.matplotlib

ターミナルでオリジナルの環境設定ファイルmatplotlibrcをコンフィグフォルダへコピーします。

$ cd /Users/[user_name]/.matplotlib
$ cp /Users/[user_name]/.pyenv/versions/anaconda3-4.4.0/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc matplotlibrc

オリジナルからコンフィグフォルダへのコピーが完了したら、環境設定ファイルmatplotlibrcをviエディタで開きます。

$ vi matplotlibrc

設定ファイルmatplotlibrcを開いたら、「#font.」という文字列を検索してみてください(viのコマンドは「/#font.」)。そして以下のように「font.family : IPAexGothic」という文字列を追記してください(#のコメントアウトは外してください)。

matplotlibの日本語文字化けを解消する(Mac編)_6

以上の追記が完了したらmatplotlibrcファイルを上書き保存して閉じましょう。

ファイルを閉じた後、コンフィグフォルダ(/Users/[user_name]/.matplotlib)内の
フォントキャッシュのファイルfontList-v330.json(もしくはfontList.py3k.cache)を削除しましょう。

$ ls
fontlist-v330.json	matplotlibrc		tex.cache
$ rm fontlist-v330.json
$ ls
matplotlibrc		tex.cache

日本語文字化けが解消済みか確認

それでは、日本語文字化けが解消されているか確認していきましょう。
再度jupyter notebookを立ち上げ、下記のコードを実行してみましょう。

%matplotlib inline
import matplotlib.pyplot as plt
 
plt.style.use('ggplot')
x=range(1,10)
y=range(2,20,2)
 
#グラフ描画
plt.plot(x, y, 'o--', color='r', label='テスト')
plt.legend(bbox_to_anchor=(0, 1), loc='upper left', borderaxespad=1, facecolor='w')
plt.plot(x, y, 'o--')
plt.xlabel('テスト_X')
plt.ylabel('テスト_y')
plt.title('テスト')

実行すると

matplotlibの日本語文字化けを解消する(Mac編) _7

グラフに日本語が表示されていることを確認できました。

日本語文字化け解消の手順その2 – japanize_matplotlib

japanize_matplotlibというPythonモジュールが開発されGithubで公開されています。

このモジュールをインストールするだけで、「その1」対応の必要無くmotplotlibの日本語文字化けを解消できます。このモジュール内にIPAexゴシックのフォントファイル(ipaexg.ttf)が含まれており、モジュールのimport時にmatplotlibにフォントとして設定する仕組みとのことです。

まずはpipでインストールしてみましょう。

$ pip install japanize-matplotlib

モジュール名の表記ですが、pipでのインストール時はハイフン’-’、pythonでのimport時はアンダーバー’_’で、japanizeとmatplotlibが結んであります。これはPythonではimportされるモジュール名にハイフン’-’が使えない仕様のため、アンダーバー’_’にしてあるようです。細かい点ですが、念の為確認してから実行してください。

Jupyter notebookで以下を実行します。せっかくなので、グラフのタイトル、軸名は「評価」、凡例ラベルは「評価結果」に変更して動作確認してみましょう。(ちなみに「その2」は、「その1」の日本語文字化け処理を未設定にして実行しています。)

%matplotlib inline
import matplotlib.pyplot as plt
import japanize_matplotlib
 
#テスト用のグラフ描画
plt.style.use('ggplot')
x=range(1,10)
y=range(2,20,2)
 
plt.plot(x, y, 'o--', color='r', label='評価結果')
plt.legend(bbox_to_anchor=(0, 1), loc='upper left', borderaxespad=1, facecolor='w')
plt.plot(x, y, 'o--')
plt.xlabel('評価_X')
plt.ylabel('評価_y')
plt.title('評価')

matplotlibの日本語文字化けを解消する(Mac編) _8

こちらについてもグラフに日本語が表示されていることを確認できました。

matplotlibの日本語文字化けを解消についてまとめ

この記事ではMac環境下でmatplotlibの日本語文字化け解消の方法をお伝えしました。この記事を参考に日本語表記可能となる設定を行い、Pythonでのグラフ作成に少しでもお役に立てば幸いです。

このページをシェアする:



DATUM STUDIOは、クライアントの事業成長と経営課題解決を最適な形でサポートする、データ・ビジネスパートナーです。
データ分析の分野でお客様に最適なソリューションをご提供します。まずはご相談ください。