【要約】Python×NetworkXの日本語文字化け回避方法 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
データサイエンティストやエンジニアが、NetworkXで共起ネットワーク等の図を描画する際、日本語ラベルが「□」と表示される問題に直面する。主な課題は以下の通りである。
- ・Matplotlibのフォントキャッシュが強く働き、デフォルトの英数字フォントが固定される。
- ・
japanize_matplotlib等の一般的なパッケージを使用しても、設定が弾かれるケースがある。 - ・通常の
plt.rcParamsによる指定が、キャッシュの影響で無視される。
// Approach
開発者は、フォントキャッシュを介さず、フォントファイルを直接登録する手法を採用する。具体的には以下のステップで解決を図る。
- ・Google Colab環境では、
apt-getでIPAフォントをインストールする。 - ・Windows環境では、
meiryo.ttc等のOS内フォントの物理パスを特定する。 - ・
fm.fontManager.addfont(font_path)を実行し、キャッシュを無視して強制登録する。 - ・
fm.FontPropertiesを用いて、登録したフォント名をplt.rcParamsに適用する。
// Result
この手法により、環境に依存するフォント設定の不具合を確実に回避できる。具体的な成果は以下の通りである。
- ・ColabやWindows環境において、日本語ラベルの正常な描画が可能となる。
- ・設定が弾かれる厄介なケースに対する、確実な「最終奥義」としての解決策が得られる。
- ・描画コードの冒頭に記述することで、環境構築の工数を削減できる。
Senior Engineer Insight
> 実戦的な回避策として極めて有効である。ただし、パスのハードコードは移植性を著しく損なう。Docker等のコンテナ環境への展開を考慮する場合、環境変数によるパス管理や、
os.path.exists()を用いた存在確認が必須となる。また、ライセンス遵守の観点から、OS標準フォントの再配布には細心の注意を払うべきである。描画ループ内での呼び出しは避け、初期化処理で一度だけ実行する設計を徹底せよ。