(急いでメモとして書いているので、修正が加わる場合があります。)
ここでは、matplotlibにオリジナルのフォントを使う場合についてまとめます。とりあえずmatplotlib使って色々図を作って見たけれど、フォントが気に入らないんだよなって人向けです。
とりあえず自分の環境は、以下の通りです。
MacOS High Sierra
version 10.13.5
Python 3.6.4 (default, Mar 9 2018, 23:15:03)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
ダウンロードしたttfを使いたい
pythonで日本語化するなどの以下の記事が参考になります。
【matplotlib】日本語の設定
要点だけを言えば、
(1) IPAフォントなどをダウンロード
(2) 解凍して、ttfファイル達を以下で表示される場所に設置。
import matplotlib as mpl
mpl.matplotlib_fname()
/path-to-install/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
と表示された場合、ダウンロード先は、
/path-to-install/python3.6/site-packages/matplotlib/mpl-data/fonts
(3) cacheとjsonの削除
mpl.mlp.get_cachedir()
で得られるdirectory内のfontList.cacheとfontList.jsonをremove。
fontList.jsonは中に、matplotlibが自ら探し出したfontの情報が書き込まれている。ここに書かれているfontであれば利用できる。
別プログラムのあのフォントが使いたい
前項の最後、に書いたfontList.jsonに任意のpathのフォントを読み込む。
ここでは、TeXLive2017でインストールした際に一緒に入っていたIPAフォントをmatplotlibで認識させる。そのためのpythonでのコードは以下の通り。ただし、IPAフォントのパスを/path-to-install/texlive/2017/texmf-dist/fonts/truetype/public/ipaex
としておく。
先にfontList.json, fontList.cacheをremoveする必要があるかもしれない。
from matplotlib import font_manager as fm, rc
path_to_install='/path-to-install/texlive/2017/texmf-dist/fonts/truetype/public/ipaex/'
font_files = fm.findSystemFonts(fontpaths=path_to_install) # pathにあるttfファイルを見つける
font_list = fm.createFontList(font_files) # フォントリストを作成
fm.fontManager.ttflist.extend(font_list) # matplotlibのフォントリストに追加
今、パス先のディレクトリ内には以下のttfファイルが含まれている。
ipaexg.ttf ipaexm.ttf ipag.ttf ipagp.ttf ipam.ttf ipamp.ttf
この時、font_list
をprint
すると、以下のように表示される(見やすくするために、改行している)。
[
<Font 'IPAexMincho' (ipaexm.ttf) normal normal 400 normal>,
<Font 'IPAMincho' (ipam.ttf) normal normal 400 normal>,
<Font 'IPAPGothic' (ipagp.ttf) normal normal 400 normal>,
<Font 'IPAPMincho' (ipamp.ttf) normal normal 400 normal>,
<Font 'IPAGothic' (ipag.ttf) normal normal 400 normal>,
<Font 'IPAexGothic' (ipaexg.ttf) normal normal 400 normal>
]
これらのファイルがfontList.jsonに追加される。
読み込みができたとして、matplotlibのフォントの変更は、
rc('font', family='IPAPMincho')
として完了となる。
ちなみに図を作成する際に読み込みを失敗していたら、
/path-to-install/python3.6/site-packages/matplotlib/font_manager.py:1328: UserWarning: findfont: Font family ['IPAPMincho'] not found. Falling back to DejaVu Sans
(prop.get_family(), self.defaultFamily[fontext]))
みたいなエラー構文が出る。
参考 :
https://stackoverflow.com/questions/35668219/how-to-set-up-a-custom-font-with-custom-path-to-matplotlib-global-font
https://matplotlib.org/api/font_manager_api.html