2013-02-22 8 views
5

に私は一連の番号がありますフォーマット番号一貫Pythonの

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の文字列フォーマットオペレータ%を使用する必要があることを知っていますが、これを行う方法はありません。誰かが私にどのように見せてもらえますか(または私に別の方法を教えてください)?

+0

また、str.formatを試すこともできます - http://docs.python.org/2/library/string.html#formatstrings – dmg

+0

プロットはどのように作成していますか?それは単にASCIIアートのようなプロットですか、 'matplotlib'や他のライブラリを使用していますか? – Bakuriu

+0

''%s 10 ^(%s)'%(number1、number2)'は動作しますか? – dmg

答えて

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

EDITとして印刷されます:あなたはmatplotlibを使用しているので、それは別の話だ:あなたは、TeXのレンダリングエンジンを使用することができます。間に合わせと-例:確かに新しい.format文字列フォーマットと少しきれいになり

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() 

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など

+0

私はこれが彼が望んでいたものではないと信じています。私はここに上付き文字は見ません。 – Bakuriu

+0

1)指数を上付き文字に置き、2) 'e'を' 10'で置き換える方法はありますか? – rubenvb

+0

@rubenvb私の編集した答えを見てください。 –

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()を使用して出力するだけです。 *を使用することを忘れないでください(タプルの各項目を使用する場合)。

関連する問題