matplotlibで日本語とLaTeX(LuaTeX)を共存させる
TL;DR
apt-get update apt-get install -y \ texlive \ texlive-latex-extra \ texlive-fonts-recommended \ dvipng \ cm-super apt update apt install -y \ texlive-luatex \ texlive-lang-japanese
import matplotlib as mpl import matplotlib.pyplot as plt import japanize_matplotlib mpl.use('pgf') plt.rcParams['text.usetex'] = True plt.rcParams['pgf.texsystem'] = 'lualatex'
詳細な手順
matplotlib
上で日本語とLaTeX
を同時に使う方法を書き残します. 厳密にはLuaTex
です. 後述の通り, PGFバックエンドを用いるので, plt.show()
などで期待されるインタラクティブな画像表示は機能しません. 画像を保存するだけで十分な方に向けた記事です.
各versionは以下の通りです.
Python
3.8.13matplotlib
3.6.2japanize-matplotlib
1.1.3
LaTeX
環境は以下のように構築されています.
apt-get install texlive texlive-latex-extra texlive-fonts-recommended dvipng cm-super pip3 install latex
matplotlib
で日本語を使う方法にjapanize-matplotlib
があります. これは以下のようなコードを実行する分には何の問題もありません。
import matplotlib.pyplot as plt import japanize_matplotlib plt.title('タイトル') plt.show()
しかし以下のようにLaTeX
と同時に使おうとするとエラーが起きます. これは特殊な設定をしないとLaTeX
で日本語が使えないことに由来します.
import matplotlib.pyplot as plt import japanize_matplotlib plt.rcParams['text.usetex'] = True plt.title('タイトル') plt.show()
RuntimeError: latex was not able to process the following string: b'\\u30bf\\u30a4\\u30c8\\u30eb' ... ! Package inputenc Error: Unicode character タ (U+30BF) (inputenc) not set up for use with LaTeX. ... l.29 {\rmfamily タ イトル}%
これは, 基本的にLaTeX
で日本語を使えるようにすれば解消されます. ここでは一例としてLuaTeX
とtexlive-lang-japanese
を使う方法を示します.
texlive-luatex
とtexlive-lang-japanese
をインストールします.
apt update apt install -y texlive-luatex texlive-lang-japanese
コードは以下のように変更します.
import matplotlib as mpl import matplotlib.pyplot as plt import japanize_matplotlib mpl.use('pgf') plt.rcParams['text.usetex'] = True plt.rcParams['pgf.texsystem'] = 'lualatex' plt.title('タイトル') # plt.show() plt.savefig('title.pdf')
PGFバックエンドを用いるので, plt.show()
などで期待されるインタラクティブな画像表示は機能しません.