如何使用十种格式的功能进行注释?

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)

在此输入图像描述