我有几个由0.000001,0.00001,0.0001,....,1.0
给出的值存储在my_Array
(np.array
)中。对于这些值中的每一个,我都需要在图中标出一条不同的曲线,并将其存储在图例中为val = 10e-6
而不是val = 0.000001
。
如果我使用第二个版本,则第二个版本会自动存储(第i个值):
matplolib.pyplot.plot(...., label = 'val = ' + str(my_Array[i]))
是否存在将浮点表示法转换为10表示法的科学能力的功能?
答案 0 :(得分:4)
您可以结合使用ScalarFormatter
和FuncFormatter
将值格式化为Mathtext。即而不是0.01或1e-2,它看起来像。
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
vals = [0.000001,0.00001,0.0001,0.01,1.0]
f = mticker.ScalarFormatter(useOffset=False, useMathText=True)
g = lambda x,pos : "${}$".format(f._formatSciNotation('%1.10e' % x))
fmt = mticker.FuncFormatter(g)
fig, ax = plt.subplots()
for i,val in enumerate(vals):
ax.plot([0,1],[i,i], label="val = {}".format(fmt(val)))
ax.legend()
plt.show()
这基本上与Can I show decimal places and scientific notation on the axis of a matplotlib plot?中的概念相同,只是轴不是图例,而是图例。
答案 1 :(得分:0)
您只需要在'%.2E%'和所需数字之间进行取整即可。
'%.2E' % Decimal('40800000000.00000000000000')
# returns '4.08E+10'
在Display a decimal in scientific notation上看到
“%。2E%”四舍五入到小数点后第二位。要舍入为第一个,请使用'%.1E%'。
-
要实现您想要的,只需:
x = 0.0001
y = '%.2E' % x
print (y)
# prints 1.00E-04
(在jonrsharpe的技巧后编辑)
答案 2 :(得分:0)
理论上,下面的方法应该工作,而无需调用私有函数。但是,在3.11版中至少有一些问题,至少是这样的,以至于实际上在ScalarFormatter中都没有对功率限制进行检查。
import matplotlib.ticker as mticker
f = mticker.ScalarFormatter(useMathText=True)
f.set_powerlimits((-3,3))
"${}$".format(f.format_data(0.0001))