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("日本語")
日本語の設定方法
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の順にファイルの検索が行われ、ファイルが見つかれば読み込みが行われます。
- 設定が読み込まれる、pythonファイルと同フォルダ内にある設定ファイル
- matplotlib ディレクトリにある設定ファイル
OS パス Windows C:\\Documents and Settings\\ユーザー\\.matplotlib Mac /Users/ユーザー/.matplotlib/ Linux .config/matplotlib/ - 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のパスを調べ直せば解決する場合が多いです。
コメント