How can I clarify the power of ten formatting?

I would like my annotation numbers to be similar to {x} \ cdot10 ^ {y}, rather than what they are now: {x} E + {y}. Is there a suitable string format for this?

The most ideal solution for me would be to use a format string, for example, "% .2e", but with automatic conversion to ten values.

+4
source share
2 answers

You can define your own string formatter for use with LaTeX or Mathtext. In the sci_notation() function below, you can specify the number of significant decimal digits as well as the number of decimal digits to print (by default, the number of significant decimal digits). You can also explicitly indicate which metric should be used.

 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 not exponent: exponent = int(floor(log10(abs(num)))) coeff = round(num / float(10**exponent), decimal_digits) if not precision: 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() 

enter image description here

+10
source
 def round_to_n(x, n): " Round x to n significant figures " return round(x, -int(py.floor(py.sign(x) * py.log10(abs(x)))) + n) def str_fmt(x, n=2): " Format x into nice Latex rounding to n" power = int(py.log10(Round_To_n(x, 0))) f_SF = Round_To_n(x, n) * pow(10, -power) return r"${}\cdot 10^{}$".format(f_SF, power) >>> x = 1203801.30201 >>> str_fmt(x) $1.2\\cdot 10^6$ 

There are many options for how to parameterize this, for example, you could specify the exponent ( y ) rather than automatically generate it, but the principle remains the same.

0
source

Source: https://habr.com/ru/post/1497774/


All Articles