7

我的 python 脚本中有一个数字,我想将其用作 matplotlib 中绘图标题的一部分。是否有将浮点数转换为格式化的 TeX 字符串的函数?

基本上,

str(myFloat)

返回

3.5e+20

但我想要

$3.5 \times 10^{20}$

或者至少让 matplotlib 像第二个字符串一样格式化浮点数。我也被困在使用 python 2.4,所以特别感谢在旧版本中运行的代码。

4

4 回答 4

9

使用旧的 stype 格式:

print r'$%s \times 10^{%s}$' % tuple('3.5e+20'.split('e+'))

使用新格式:

print r'${} \times 10^{{{}}}$'.format(*'3.5e+20'.split('e+'))
于 2013-06-25T21:05:39.497 回答
6

You can do something like:

ax.set_title( "${0} \\times 10^{{{1}}}$".format('3.5','+20'))

in the old style:

ax.set_title( "$%s \\times 10^{%s}$" % ('3.5','+20'))
于 2013-06-25T20:42:12.273 回答
1

安装num2tex包:

pip install num2tex

并将您的标题格式化为:

ax.set_title('${}$'.format(num2tex(3.5e20)))

或使用以下_repr_latex_()方法:

ax.set_title(num2tex(3.5e20)._repr_latex_())

这会给你同样的东西。

num2tex继承自,str因此该format函数可以像将其用于字符串一样使用:

ax.set_title('${:.2e}$'.format(num2tex(3.5e20)))

免责声明:我(最近)创建了num2tex. 它适用于我的工作流程,我现在正试图从可能有兴趣使用它的其他人那里获得反馈。

于 2019-02-06T19:46:00.283 回答
1

如果您想使用任意浮点数执行此操作,只需对上一个答案进行简单的阐述。请注意,您需要使用re包中的拆分来考虑负指数的可能性。

import re
val = 3.5e20
svals = re.split('e+|e-',f'{val:4.2g}')
print(r'${} \times 10^{{{}}}$'.format(*svals))
于 2022-01-31T18:16:16.563 回答