<p>抱歉重复发布,但我提供了一个解决方案,即使<strong>不令人满意</strong>,也可能对其他人有用</p>
<p>我发现我的解决方案不令人满意,因为它涉及到使用我的以下函数“手动”转换格式(我不是Python专家,因此我相信它可以简化/优化):</p>
<pre><code>def convert_e_format_to_latex(numberAsStr):
# CONVERTS THE STRING numberAsStr IN FORMAT '%X.Ye' TO A LATEX 'X \\times 10^{Y}'
baseStr = list(numberAsStr)
ind = 0
i = 0
flag = True
nStr = len(baseStr)
while (i < nStr and flag):
if (baseStr[i] == 'e' or baseStr[i] == 'E'): # NOT USING FIND BECAUSE 'e' CAN ALSO BE CAPITAL
ind = i
flag = False
i += 1
if (flag):
print('ERROR: badly formatted input number')
return ''
else:
expo = str(int(''.join(baseStr[ind+1:nStr]))) # GET RID OF POTENTIAL ZEROS
root = ''.join(baseStr[0:ind])
indP = root.find('.')
integerPart = int(root[0:indP]) #integer
decimalPart = root[indP+1:ind] #string
if (integerPart == 1): #DETECTING IF THE ROOT IS ONE (positive value)
x = ''.center(ind-(indP+1),'0')
if (decimalPart == x):
return '$10^{'+expo+'}$'
else:
return '$'+str(integerPart)+'.'+decimalPart+' \\times 10^{'+expo+'}$'
elif (integerPart== -1): #DETECTING IF THE ROOT IS ONE (positive value)
x = ''.center(ind-(indP+1),'0')
if (decimalPart == x):
return '$-10^{'+expo+'}$'
else:
return '$'+str(integerPart)+'.'+decimalPart+' \\times 10^{'+expo+'}$'
else:
return '$'+str(integerPart)+'.'+decimalPart+' \\times 10^{'+expo+'}$'
</code></pre>
<p>然后,我在前面的代码中添加:</p>
<pre><code>for i in range(0,nbdiv):
xTicksStr.append(convert_e_format_to_latex('%1.1e'%xTicks[i]))
</code></pre>
<p>我改变了绘图中的xticks指令,变成:</p>
<pre><code>plt.xticks(xTicks,xTicksStr)
</code></pre>
<p>这将提供所需的输出:</p>
<p><a href="https://i.stack.imgur.com/ZMb5d.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ZMb5d.png" alt="enter image description here"/></a></p>
<p>这是可行的,但它太复杂了。。。我很确定我错过了一个更简单的功能。你觉得怎么样</p>