klm*_*lmn 7 matplotlib number-formatting
我希望注释中的数字类似于{x}\cdot10 ^ {y},而不是现在的数字:{x} E + {y}.是否有适合的字符串格式化程序?
对我来说最理想的解决方案是使用格式字符串,例如'%.2e',但可以自动转换为十个表示的强大功能.
sod*_*odd 11
您可以定义自己的字符串格式化程序,以便与LaTeX或Mathtext一起使用.在sci_notation()
下面定义的函数中,您可以指定有效小数位数以及要打印的小数位数(默认为有效小数位数).也可以明确指定应该使用哪个指数.
from math import floor, log10
# Use LaTeX as text renderer to get text in true LaTeX
# If the two following lines are left out, Mathtext will be used
import matplotlib as mpl
mpl.rc('text', usetex=True)
import matplotlib.pyplot as plt
# Define function for string formatting of scientific notation
def sci_notation(num, decimal_digits=1, precision=None, exponent=None):
"""
Returns a string representation of the scientific
notation of the given number formatted for use with
LaTeX or Mathtext, with specified number of significant
decimal digits and precision (number of decimal digits
to show). The exponent to be used can also be specified
explicitly.
"""
if exponent is None:
exponent = int(floor(log10(abs(num))))
coeff = round(num / float(10**exponent), decimal_digits)
if precision is None:
precision = decimal_digits
return r"${0:.{2}f}\cdot10^{{{1:d}}}$".format(coeff, exponent, precision)
scinum = -3.456342e-12
# Annotation with exponent notation using `e` as separator
plt.annotate(scinum, (0.5,0.5), ha='center', fontsize=20)
# Annotation with scientific notation using `\cdot 10` as separator
plt.annotate(sci_notation(scinum,1), (0.5,0.4), ha='center', fontsize=20)
# Annotation with scientific notation using `\cdot 10` as separator
# with 1 significant decimal digit and 2 decimal digits shown as well
# as a given exponent.
plt.annotate(sci_notation(scinum,1,2,exponent=-14), (0.5,0.3), ha='center', fontsize=20)
plt.title('Scientific notation', fontsize=14)
plt.show()
Run Code Online (Sandbox Code Playgroud)