テスト勉強中に限って部屋の掃除をしたくなるように、研究が上手くいっていない時は何かを作りたくなる。なのでQittaで記事を書くことにする。今回はWSLでMatplotlibを使用してグラフを描こうとしたときに指定したフォントが見つからないエラーを解消する方法を記した。結論を先に書くとMatplotlibのキャッシュを削除すると直った。
生じたエラーについて
Windows11でWSLを使用してWSL上でPythonを動かしている。筆者はMatplotlib.pyplotを使用してグラフを描くのだが、Macから移行を進めているのでMac上で走っていたスクリプトはたまにエラーを吐く。今回、説明するのはフォントエラーの解消である。以下が問題の1行である。
plt.rcParams["font.family"] = "Arial"
と指定するとフォントが見つからないよと返ってくる。
findfont: Font family 'Arial' not found.
なのでこれを解消していく。
1. WSLにあるフォントのチェック
fc-list
で入っているフォントをチェックする。Windowsに入っているフォントを使用したい場合はこちらの記事を参考に設定する(コマンドが使用できない場合はsudo apt install fontconfig
で入れる)。Arial入っているのでWSL上では少なくとも使用できる。WSLインストール時にはArialは入っていない。
2. Matplotlibに認識されているフォントのチェック
以下のスクリプトでMatplotlibが認識しているフォントの一覧を表示させることができる。Arialはしっかり認識されていたけどエラーが出ている状況は変わらななかった。
from matplotlib import font_manager
fonts = font_manager.findSystemFonts(fontpaths=None, fontext='ttf')
print(fonts)
3. キャッシュの削除
ターミナルを叩いてMatplotlibが参照しているキャッシュを削除する。このキャッシュファイルを削除するとmatplotlibを起動したときに勝手にフォントのリストを再び検索して作る仕様と考えられる。初期にWSL上にArialがそもそも入ってないのでフォントを更新した後には毎回、Matplotlib上のキャッシュを消さないといけない。
rm ~/.cache/matplotlib -fr
これだけで直った。2か月くらいこの問題を放置していた。