我有一系列数字:
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 10^(-3)
。
我知道我必须为此使用 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 10^(-3)
。
我知道我必须为此使用 Python 的字符串格式化运算符%
,但我看不到这样做的方法。有人可以告诉我如何(或告诉我另一种方式)吗?
如果您确定小数点后不需要超过固定位数,则:
>>> 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
等。
list_item = (multiply_number,degree_number)
displayed_items = [list_item, list_item, ....]
for item in displayed_items:
print '{0}*10^({1})'.format(*item)
创建带有要显示的编号的元组列表。只需使用 format() 输出它们。不要忘记使用 *(这用于使用元组中的每个项目)。