Matplotlib: LaTeX とフォント設定によるこだわりのグラフ作成
1. 動機
データ可視化における美的品質は、情報伝達の本質ではありませんが高いに越したことはありません。視覚的に洗練されたグラフは、研究者が細部まで注意を払っているという印象を与え、報告内容の信頼性を印象づける効果があります。また、読者の記憶に残って結果的に情報の伝達効率と理解度の向上に寄与します。
現代的なデータ可視化ツールとして広く使用されている matplotlib は、豊富なカスタマイズ性と高い表現力により、科学計算やデータサイエンス分野において不可欠なライブラリとなっています。しかし、matplotlib の標準フォント (DejaVu Sans) はビジネスや学術の文脈ではややカジュアルな印象があります。数式の表現もチープなテキストベースで処理されるため、論文やフォーマルな報告書では明らかに浮いてしまいます。
plt.title('Distribution of Petal Length')
plt.xlabel('Petal Length $L$ [cm]')
plt.ylabel('Frequency $f$')
plt.legend()
この記事では、matplotlib で作成するグラフの品質を向上させるために、LaTeX による数式のレンダリングと、論文や報告書品質に適したフォントの変更について解説します。
\LaTeX 表記を使用できるようにする
2. まずタイトルや XY 軸ラベルなどのテキストを padlatex
をインストールしてコマンドラインから実行できるようにします。
以下の例は Ubuntu 24.02 で必要なライブラリをインストールする方法です。Windows の WSL2 でも同じ方法でインストールできます。
sudo apt -y install texlive-lang-japanese texlive-fonts-extra dvipng
pdflatex --version
# pdfTeX 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian)
# ...
インストールが完了したら適当な LaTeX 文書を作成して、pdflatex
コマンドが正しく機能することを確認することをお勧めします。
matplotlib で LaTeX 組版を使用するには rcParams
で text.usetex
を有効化します。以下のコードを実行前に追加することで、すべてのテキスト要素が LaTeX エンジンによって処理されるようになります。
plt.rcParams.update({
"text.usetex": True,
"pgf.texsystem": "pdflatex",
})
font.family
に serif を指定すると Times のようなセリフ付きのフォントになります。デフォルトの sans-serif より「オシ」は弱くなりますが、好みに応じてよりスマートで知的な印象を与えたい場合にはこちらも良いと思います。
plt.rcParams.update({
"text.usetex": True,
"font.family": "serif",
"pgf.texsystem": "pdflatex"
})
LaTeX で執筆した論文などで使用するグラフの場合には、このように LaTeX 組版を有効にすることで本文との視覚的統一間が保たれ、文書全体の品質が向上します。特に
なお、matplotlib は PGF 形式での出力をサポートしており、LaTeX 文書から以下のように直接取り込むことができます。この方法は、図表のフォントが文書のフォント設定と完全に一致し、LaTeX 側でフォントサイズや色を後から調整できるため便利です。
# PGF形式で保存
plt.savefig('figure.pgf')
\documentclass{article}
\usepackage{pgf}
\begin{document}
\begin{figure}[htbp]
\centering
\input{figure.pgf}
\caption{A figure generated by matplotlib above.}
\label{fig:sample}
\end{figure}
\end{document}
3. こだわりのフォントに変更する
さて、LaTeX の品質でも十分に綺麗ですが、ここでライバルに差を付けるためにもう一歩踏み込んでみましょう。
例えば世界的なデザインやブランドロゴに使われている Helvetica や、Helvetica の基となった Neue Haas Grotesk を使用することで、グラフの印象はより洗練されたものになるでしょう。後者は Windows 標準の「ヨーロッパ各国語追加フォント」をインストールすれば使えるようになるので私はよく使っています (同じ Windows 上で動く WSL で使うなら問題ないと思いますが、フォントのライセンスには十分注意してください)。
まずシステムに目的のフォントをインストールします。Ubuntu 24.02 であれば以下のように個人ディレクトリにインストールできます。
mkdir -p "${HOME}/.local/share/fonts"
cp NeueHaasDisplay-Roman.ttf "${HOME}/.local/share/fonts"
fc-cache -fv
フォントのキャッシュを更新したらシステムが認識しているか確認してください。
$ fc-list 'Neue Haas Grotesk Display Pro'
/home/torao/.local/share/fonts/NeueHaasDisplay-Roman.ttf: Neue Haas Grotesk Display Pro:style=55 Roman
また、前のセクションで使用した pdflatex
はフォントの変更をサポートしていないため、代わりに xelatex
を使用する必要があります。
sudo apt -y install texlive-xetex
xelatex
を使用すると、LaTeX 文書内で setsansfont
を指定できるようになり、sans-serif 書体のときに使用するフォントを目的のフォントに変更することができます。
\documentclass{article}
\usepackage{fontspec}
\setsansfont{Neue Haas Grotesk Display Pro}
\begin{document}
\textsf{Distribution of Petal Length}
\end{document}
xelatex title.tex
matplotlib でもこのプリアンブルを追加して sans-serif のフォントを指定することができます。
matplotlib.use('pgf')
plt.rcParams.update({
"text.usetex": True,
"pgf.texsystem": "xelatex",
"pgf.rcfonts": False,
"pgf.preamble": r"\usepackage{fontspec}\setsansfont{Neue Haas Grotesk Display Pro}"
})
設定内容は以下の通りです:
- まず、
matplotlib.use('pgf')
で matplotlib のバックエンドを LaTeX と統合されたグラフィックパッケージである PGF に変更します。 - そして
"text.usetex": True
ですべてのテキスト要素 (タイトル、軸ラベル、凡例等) を LaTeX エンジンでレンダリングすることを指示します。 -
"pgf.texsystem": "xelatex"
で LaTeX エンジンを指定し、 -
"pgf.rcfonts": False
で matplotlib のフォント設定を無効化して LaTeX 側のフォント設定を優先します。これで preamble で指定したフォントが適用されようになります。 - 最後に
"pgf.preamble": ...
で sans-serif のフォントとして Neue Haas Grotesk を使用するプリアンブルを挿入します。
まとめ
この記事では matplotlib のデフォルト設定から一歩進み、学術論文やビジネスの報告書に適したグラフを作成するための追加のテキスト表現変更手法について解説しました。LaTeX 組版の導入によって数式表現が格段に向上し、さらに Helvetica や Neue Haas Grotesk といった洗練されたフォントを使用することで、視覚的な品質を改善できます。
見た目の美しさは意図を伝達する上で重要な役割を果たします。美しく統一感のある図表は、読者に対して調査内容の丁寧さと専門性を印象付け、報告全体を読む価値のあるものと感じさせます。ぜひ印象の良いグラフを活用して、より説得力のある報告書を作成してください。
Discussion