はじめに
世に星の数ほどある matplotlib 日本語対応系(豆腐解消系)の記事ですが、それらを見て設定したはずなのに上手くいかないことがたまにあります。
ググっても対処法がすぐに見つからなかったものをまとめます。
実行環境
- CentOS 7.3
- Python 3.6.5
- matplotlib 3.0.2
pyenv-virtualenv におけるフォントファイルの置き場所がわからない
日本語対応フォントをダウンロードして所定の場所に置くときに、環境デフォルトの matplotlibrc
を探しに行きます。
このパスの近くに fonts/ttf/
ディレクトリがあるので、フォント ttf ファイルをコピーして設置します。
import matplotlib
matplotlib.matplotlib_fname()
ただし、既に ~/.matplotlib/matplotlibrc
を作成している場合、上記コマンドでデフォルトパスが表示されず、ttf ファイルってどこに置けばいいんだっけ... となります。
特に pyenv-virtualenv 環境で、環境構築に詳しくないけど便利だから使ってる(私です)みたいな場合、とにかく見つかりません。
pyenv-virtualenv 環境を使っている場合、ttf ファイルは以下ディレクトリに置きましょう。
~/.pyenv/versions/<pyenv name>/envs/<virtualenv name>/lib/python<version>/site-packages/matplotlib/mpl-data/fonts/ttf/
自分で作成した matplotlibrc が参照されない
フォントの指定を matplotlibrc
内で行うのですが、環境デフォルトのファイルを編集することはあまり推奨されず、ホームディレクトリ以下に ~/.matplotlib/matplotlibrc
を作成して、その中にフォントの指定を記載します。
普通はデフォルトの matplotlibrc
ではなく ~/.matplotlib/matplotlibrc
を優先して参照するようになっているのですが、何かの影響でデフォルトの matplotlibrc
を参照したままになってしまうことがあります。
matplotlibrc
は環境変数 MATPLOTLIBRC
で指定されたディレクトリ以下を探しに行くので、確認してデフォルトのままになっている場合は ~/.bashrc
などで明示的に指定しましょう。
echo $MATPLOTLIBRC
# 想定したパスと違った場合、以下を追記
export MATPLOTLIBRC=$HOME/.matplotlib
キャッシュが削除されない
さあ設定が終わってプロットしてみるぞ!と意気込んだものの、まだグラフタイトルに豆腐が鎮座していて「うわ...」ってなること、よくあります。
フォントの設定を済ませたらフォントのキャッシュファイルを削除する必要があるのですが、それっぽいファイルが色んな所にあって、消しても消しても設定が反映されません。
消すべきキャッシュファイルは以下コマンドで確認できます。
示されたディテクトリ以下のファイルを削除しましょう。
import matplotlib
matplotlib.get_cachedir()
# ~/.cache/matplotlib などが返ってくるので、そこ以下のファイルを削除する
おわりに
筆者は良く pyenv-virtualenv で環境の切り分けを行っているのですが、毎度「matplotlib 日本語」でググっているので、自分の備忘95%でまとめました。
お役に立つことがあれば幸いです。
いつもたどり着くページ