matplotlib 特定格式的图例

gr8qqesn  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(96)

我正在使用以下命令绘制一个带有图例的图形:

K = [1e3,1e4]
plt.plot(x[:len(y1)], y1, 'o', label=f'Simulation ($K_L$={K[i]:0e})')

字符串
其产生以下图形:


的数据
但我希望图例采用如下所示的特定格式:

KL = 103

gg58donl

gg58donl1#

那这个呢(this answer)。

import matplotlib.pyplot as plt

def sci_notation(number: float, n_decimals: int = 2) -> str:
    sci_notation = f"{number:e}"
    decimal_part, exponent = sci_notation.split("e")
    decimal_part = float(decimal_part)
    exponent = int(exponent)

    if decimal_part == 1.0:
        return f"$10^{exponent}$"
    else:
        return f"{decimal_part:.{n_decimals}f}x$10^{exponent}$"

K = [1e3, 1.323423e4]
plt.plot([], [], "o", label=f"Simulation ($K_L$={sci_notation(K[0])})")
plt.plot([], [], "o", label=f"Simulation ($K_L$={sci_notation(K[1])})")
plt.legend()
plt.show()

字符串


的数据

irlmq6kh

irlmq6kh2#

如果您的图例是硬编码的,则可以执行以下操作:

import numpy as np
import matplotlib.pyplot as plt

K = [1e3,1e4]  # hardcoded legend
x = np.random.rand(100)
y1 = np.random.rand(100)

plt.plot(
  x[:len(y1)],
  y1,
  'o',
  label=f'Simulation ($K_L$=$10^{int(np.log10(K[0]))}$)'
)
plt.legend()

字符串
这里你的K的log10被手动放入指数中(上标)。
此外,还有一个scinot包,它可能有助于您更灵活地格式化

import scinot as sn
a=1.7e-2
print(scinot.format(a))

1.7 × 10⁻²

相关问题