matplotlibで日本語が◻︎になってしまう
いつの頃からかjapanize-matplotlibを愛用させていただいていて、表題の問題知らずだったのですが、japanize-matplotlibを呼び出しても日本語が全て豆腐(◻︎)になってしまうことがあったので解決方法を書いておきます。
って思って調べたらpython3.12以降ではうまく動かないんだそうな。
1.パラメータを変更する
1-1.定番: plt.rcParams['font.family'] を修正
いろんなところで出てくるので一度は試す手法。
とはいえこれ入れるだけで治るって考えないで、見たことがない方は一度パラメータを見てみたほうがいいです。
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'IPAPGothic' #フォント設定全体
こちらとかで先人が書いてくれているのでこれをまず参照して試してみるのが良いです。
残念ながらうちはfont等「インストール」が禁じられているので、他の手法を探すことに😢
1-2.日本語フォントを選び、sans-serif に割り当てる
最終的にこの手法で解決。プリインストールされているfontのみで解決することを目標にした手法です。
まず日本語対応フォントを探します。
import matplotlib as mpl
from matplotlib import font_manager as fm
# 「日本語フォント名」を探す
candidates = [
# Linuxで入ってることが多い
"Noto Sans CJK JP", "Noto Sans JP",
"IPAexGothic", "IPAGothic", "TakaoGothic",
# Windowsで多い
"Yu Gothic", "Meiryo", "MS Gothic",
# macOSで多い
"Hiragino Sans", "Hiragino Kaku Gothic ProN",
]
available = set(fm.get_font_names()) # 利用可能フォント名一覧 :contentReference[oaicite:2]{index=2}
jp_font = next((f for f in candidates if f in available), None)
# 2) フォントが「名前で見つからない」場合:フォントファイルを直接登録して使う
# (自前の .ttf/.otf/.ttc を指定)
font_path = None # 例: "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc"
fp = None
if jp_font is None:
if font_path is None:
raise RuntimeError(
"日本語フォントが見つかりません。OSに日本語フォントを入れるか、font_path に .ttf/.otf/.ttc を指定してください。"
)
fm.fontManager.addfont(font_path) # addfontは毎回呼ぶ必要あり :contentReference[oaicite:3]{index=3}
fp = fm.FontProperties(fname=font_path)
jp_font = fp.get_name()
else:
fp = fm.FontProperties(family=jp_font)
print("Using JP font:", jp_font)
日本語対応フォントを適用。
# NetworkXの既定 font_family='sans-serif' が日本語フォントを拾うようにする
# "IPAPGothic"にしたければjp_fontを直接指定。
mpl.rcParams["font.family"] = ["sans-serif"]
mpl.rcParams["font.sans-serif"] = [jp_font] + mpl.rcParams.get("font.sans-serif", [])
2.もっと再現性よく(楽に)解決したい
基本的にimportするだけで解決される系なので楽です。
本章は、2026年1月時点の備忘として記載。当然ながらサードパーティ製パッケージは自己責任です。
2-0.japanize-matplotlibを試す
python3.12より前のバージョンであればこちらが楽だと思います。ただし、2020年以降更新されていないパッケージなので注意して使いましょう。
2-1.japanize-matplotlib-modernを試す
goastro氏のjapanize-matplotlibのfork(か?):2025年更新
PYPI:japanize-matplotlib-modern
2-2.matplotlib-fontjaを試す
ciffelia氏によるjapanize-matplotlibのfork。:2025年更新
PYPI:matplotlib-fontja
3.結言
筆者は最終的に1-2の手法で久々に直面した豆腐問題が解決されました。
取組みとしては、NetworkXを使ってネットワーク図を書こうとしたらタイトル以外豆腐になってしまいました。
2で紹介したパッケージ系は全滅だったので、紆余曲折、右往左往、などなどを経て結局公式ドキュメントでの解決となりました。
公式は大事。公式を最初に見よう。