4
3

More than 3 years have passed since last update.

matplotlibで変数を上付き文字として正しく表示する

Last updated at Posted at 2020-01-14

ちょっと困ったので備忘録です。
環境は Python 3.8.0、matplotlib 3.1.2 です。

事案

matplotlibで変数aを上付き文字として出力しようと思って以下のようなコードを書きました。

import numpy as np
import matplotlib.pyplot as plt

a = 14
x = np.arange(0, 1, 0.1)
y = x**a

plt.plot(x, y, label=rf'$y=x^{a}$') # 問題の箇所
plt.legend()
plt.show()

いざプロットしてみると、以下のような図が得られました。
Figure_1.png
残念ながら、変数aの一文字目のみが上付き文字として識別されてしまいました。

ごめんごめんと思って、$y=x^{{a}}$ のように波括弧を1つ増やしてプロットしてみたら、$y=x^a$ と表示されてしまいました。

解決策

結果として、以下のように三重に波括弧を増やすことで解決しました。

import numpy as np
import matplotlib.pyplot as plt

a = 14
x = np.arange(0, 1, 0.1)
y = x**a

plt.plot(x, y, label=rf'$y=x^{{{a}}}$') # ズバッと解決
plt.legend()
plt.show()

Figure_2.png

なぜか

Pythonドキュメントに書いてました。

文字列のうち波括弧の外にある部分については書いてある通りに扱われます。ただし二重の波括弧 '{{' または '}}' は、それぞれに対応する一重の波括弧に置換されます。

つまり最初の波括弧が一重の場合「f'{a}'」では、a14に置換され波括弧が消されて処理されたので、一文字目だけが上付きになったんですね。

次に二重の場合「f'{{a}}'」では、二重の波括弧が一重の波括弧に置換され、そしてaはそのままで{a}が処理されたので、$y=x^a$ と表示されてしまったんですね。

なので三重「f'{{{a}}}'」にすれば二重の波括弧が一重の波括弧に置換され、そしてa14に置換され{14}が処理されたので、正しく14が上付き文字として認識されたんですね。

以下のような感じです。

a = 14
print(f'x^{a}')     # x^14
print(f'x^{{a}}')   # x^{a}
print(f'x^{{{a}}}') # x^{14}

Tex構文として正しいのは一番下ですね。

以上です。Python頑張ります。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3