【Python】matplotlibで軸ラベルに上付き・下付き文字を表示する

2022-03-18matplotlib,python

matplotlibでグラフを作成したときに、軸ラベルに数式や単位など上付き・下付き文字を表示したい時があります。matplotlibで表示する方法について説明します。

  1. 2021.01.09 初版公開
  2. 2021.09.24 リライト

上付き・下付き文字の書き方

軸ラベルに上付き・下付き文字を表示するには、LaTeX形式で記述します。

import matplotlib.pyplot as plt

x = ["$N_{1}$", "$N_{2}$"]
y = [100, 150]

# 棒グラフを表示
plt.barh(x, y)
plt.show()
  • 出力

figure_1

これは軸ラベル以外でも使えますので、例えばタイトルで表示したい場合は、上記コードのplt.show()の前に

plt.title("Population of $N_{1}$ and $N_{2}$")

などと記述します。

figure_2

上付き・下付き文字以外の書き方

LaTeX形式で記述することから、ギリシャ文字や数式も表示できます。

import matplotlib.pyplot as plt
import numpy as np
from scipy import stats

x = np.linspace(-5, 5, 100)
y0 = stats.norm.cdf(x, 0, 1)
y1 = stats.norm.cdf(x, 0, 0.5)
y2 = stats.norm.cdf(x, 0, 2)

plt.plot(x, y0, label=r"$\sigma = 1$")
plt.plot(x, y1, label=r"$\sigma = 0.5$")
plt.plot(x, y2, label=r"$\sigma = 2$")
plt.title(r"plot of $f(x) = \int_{-\infty}^{x}(\frac{1}{\sqrt{2 \pi}\sigma} e^{\frac{t^{2}}{\sigma^{2}}})\mathrm{d}t$")
plt.legend(bbox_to_anchor=(0, 1), loc='upper left', borderaxespad=1)
plt.show()
  • 出力

figure_3

注意点

LaTex形式を使う場合は、文字列の中なのでバックスラッシュを2つ重ねてエスケープする必要があります。特にLaTeX形式はバックスラッシュを多用するので、できればraw文字列を表すrを前につけておいたほうがよいでしょう。そうすることでエスケープせずに済み、見やすくなります。

フォントの設定

日本語フォントの設定方法について、独立したエントリで書き直しました。

参考

  1. matplotlib公式サイト
  2. Matplotlibで綺麗な論文用のグラフを作る
  3. matplotlibで日本語
  4. matplotlibで作成したプロットをきれいにカスタマイズ | 化学の新しいカタチ

Numpy等の基本的な使い方について説明した書籍です。第5章でMatplotlibの使い方についても説明されています。

matplotlib,python

Posted by izadori