如何在Matplotlib中绘制以10的幂为指数的科学标注字符串?
Matplotlib实现$e^{x \times 10^b}$格式科学计数法标注
问题原因
直接用%.2e格式化数值会得到5.55e+10这类普通文本,Matplotlib的LaTeX渲染引擎不会自动将e后的部分识别为嵌套上标,因此无法生成目标格式。
实现方案
需要先将数值拆分为「系数」和「10的幂次」两部分,再按照LaTeX语法拼接公式字符串,核心是用\times表示乘号,用多层{}明确上标的嵌套层级。
方法1:无额外依赖,字符串拆分实现
import matplotlib.pyplot as plt data = 5.55e10 # 拆分系数和指数部分 coeff, exp = f"{data:.2e}".split("e") # 处理指数:转int自动去掉前导+号和无效前导0 exp = int(exp) # 拼接LaTeX格式标题 plt.title(f"e$^{{{coeff} \\times 10^{{{exp}}}}}$") plt.show()
方法2:数值计算拆分(适合批量处理场景)
import matplotlib.pyplot as plt import numpy as np data = 5.55e10 # 数值计算得到指数和系数 exp = int(np.floor(np.log10(abs(data)))) coeff = data / (10 ** exp) plt.title(f"e$^{{{coeff:.2f} \\times 10^{{{exp}}}}}$") plt.show()
效果对比
- 原有代码输出:

- 调整后输出(与期望效果一致):

内容的提问来源于stack exchange,提问作者zxdawn
相关产品推荐
相关产品推荐

