Python matplotlibで日本語の設定方法

スポンサーリンク

hannya

Pythonのライブラリmatplotlibはデータを可視化するのに最適なツールですが、初期設定では日本語が対応しておらず、日本語をグラフ内で使用すると「□□□」のような豆腐文字になってしまいます。私もこの日本語設定に手こずってしまったこともあり、またWindowやMac、Linuxなど様々なOSに適用する必要もあり、いちいち調べ直すのも面倒なため、全体的な処理の流れをまとめておくことにしました。

まとめるにあたり、以下のサイトを参考にしました。このサイトだけでも十分すぎる説明だとは思いますが、自分の忘備録のため再度説明させてください。

問題点

以下のようなコマンドで、グラフのタイトルに「日本語」を表示させようとしましたが、日本語部分が「□□□」と文字化けしてしまっています。

%matplotlib inline
from matplotlib import pyplot as plt
plt.style.use('ggplot')

plt.figure(figsize=(12,5))
plt.plot(0,0)
plt.title("日本語")

tofumoji

日本語の設定方法

matplotlibで使用可能なフォント一覧を調べる

以下のコマンドで読み込まれている、matplotlibで使用可能なフォント一覧を調べます。

import matplotlib.font_manager as fm
fm.findSystemFonts()

"""
●出力結果
['/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf',
 '/usr/share/fonts/truetype/fonts-japanese-mincho.ttf',
 '/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf',
 '/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf',
 '/usr/share/fonts/opentype/ipaexfont-mincho/ipaexm.ttf',
 '/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf',
 '/usr/share/fonts/truetype/fonts-japanese-gothic.ttf',
 '/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf',
 '/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf',
 '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf']
"""

ここで日本語に対応した、フォントがなければ、ダウンロードの必要があります。日本語対応フォントならなんでも大丈夫ですが、どんな環境でも表示可能な「IPAフォント」を使っておくのが一番無難です。

IPAフォントとは
コンピュータで文字を扱うには、文字の形をデータ化してまとめたフォントが必要です。IPAでは、システムの種類を問わず無償で利用できる高品位なフォント「IPA フォント」や、その改良版の「IPAex フォント」を開発・公開してきました。
これらのフォントは、文字符号に関する国際標準規格「ISO/IEC 10646」に準拠した符号化により、異なるシステムやコンピュータでも問題なく文字を表示できます。

ダウンロードは以下サイトから無料で入手することができます。ダウンロード後、OSのフォントフォルダに入れておきましょう。

コマンドでもダウンロード可能です。

#Ubuntu
sudo apt install fonts-ipaexfont
#CentOS
sudo yum -y install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts

matplotlibrcの書き換え

matplotlibrcはmatplotlibデフォルトのグラフのスタイルを指定することができる、設定ファイルです。デフォルトはDejaVuSansになっていますが、絶対このフォントがデフォルトでなければならない!とこだわりをもった人以外はIPAフォントをデフォルトに変更したほうが、日本語も使えるし良いと思います。

以下のコマンドで読み込まれている、matplotlibrcファイルの場所を調べます。

import matplotlib as mpl
print(mpl.matplotlib_fname())
"""
●出力結果
/home/vagrant/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
"""

私の場合はanacondaで環境構築を行ったため、設定ファイルもanacondaファイルの中に存在します。そのまま、編集しても大丈夫ですが、元のファイルはあまり修正したくないため、matplotlib ディレクトリにコピーし編集を行います。ちなみにmatplotlibrcは以下、3つのフォルダ内に置いておけば読み込まれるようです。読み込まれる優先順位もあり、1~3の順にファイルの検索が行われ、ファイルが見つかれば読み込みが行われます。

  1. 設定が読み込まれる、pythonファイルと同フォルダ内にある設定ファイル
  2. matplotlib ディレクトリにある設定ファイル
    OS パス
    Windows C:\\Documents and Settings\\ユーザー\\.matplotlib
    Mac /Users/ユーザー/.matplotlib/
    Linux .config/matplotlib/
  3. matplotlibをインストールした、mpl-data内にある設定ファイル

vimまたはテキストエディットでmatplotlibrcを開き、以下2箇所に”IPAexGothic”を追加しましょう。(コメントアウトも解除します。)

font.family         : IPAexGothic
font.sans-serif     : IPAexGothic, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande,…省略

フォントキャッシュの削除

フォントがキャッシュされていると、最新の設定が反映されない可能性があります。以下のコマンドでキャッシュの場所を調べ削除してやりましょう。

#キャッシュの場所を調べる
matplotlib.get_cachedir()
#fontList.cache、fontList.py3k.cache、fontList.jsonなどを削除

また、そんな面倒なことをしなくても、以下のコマンドで、フォントキャッシュの再構築ができるようです。

#キャッシュの削除
matplotlib.font_manager._rebuild()

結果

日本語も、無事表示されるようになりました。フォントの設定だけなのに、割と面倒くさいです。もしうまくいかない場合、読み込んでいるフォント・matplotlibrcのパスを調べ直せば解決する場合が多いです。

japanese



コメント

タイトルとURLをコピーしました