5

私は一連の数字を持っています:

from numpy import r_
r_[10**(-9), 10**(-3), 3*10**(-3), 6*10**(-3), 9*10**(-3), 1.5*10**(-2)]

そして、私はそれらを次の形式でプロットの凡例に表示させたいと思います。

a 10^(b)

^上付き文字を意味する)

たとえば、3番目の数字は。になり3 10^(-3)ます。

これにはPythonの文字列書式演算子を使用する必要があることはわかっています%が、これを行う方法がわかりません。誰かが私に方法を教えてもらえますか(または私に別の方法を教えてください)?

4

2 に答える 2

6

小数点以下の桁数が固定数を超えないことが確実な場合は、次のようにします。

>>> from numpy import r_
>>> a = r_[10**(-9), 10**(-3), 3*10**(-3), 6*10**(-3), 9*10**(-3), 1.5*10**(-2)]
>>> for x in a: print "%.1e"%x
... 
1.0e-09
1.0e-03
3.0e-03
6.0e-03
9.0e-03
1.5e-02

ここでの落とし穴は%.0e、フォーマットとして使用する場合、最後の数値は次のように出力されることです。1e-2

編集:あなたが使用しているのでmatplotlib、それは別の話です:あなたはTeXレンダリングエンジンを使用することができます。簡単で汚い例:

fig = plt.figure()
ax = fig.add_subplot(111)

x = 1.5*10**(-2)
l = ("%.0e"%x).split("e")
x_str = r"$ %s \times 10^{%s}$" % (l[0], l[1] )

ax.set_title(x_str)

plt.show()

.formatこれは確かに、新しい文字列フォーマットを使用すると少しきれいになります。

EDIT2:完全性と将来の参考のために、コメントからのOPの方法についての私の見解は次のとおりです。

x = 1.5*10**(-2)
l = ("%.0e"%x).split("e")
x_str = r"$%s \times 10^{%s}$" % ( l[0], str(int(l[1])) )

ここでは、先行ゼロを回避するためにintに変換して戻しています:-02->-2など。

于 2013-02-22T09:16:41.847 に答える
0
list_item = (multiply_number,degree_number)
displayed_items = [list_item, list_item, ....]
for item in displayed_items:
   print '{0}*10^({1})'.format(*item)

表示したい番号のタペルのリストを作成します。そして、format()を使用してそれらを出力するだけです。*を使用することを忘れないでください(これはタプルの各アイテムを使用するためのものです)。

于 2013-02-22T09:28:38.910 に答える