Python 如何将10种不同于1e-5的格式的功率放在轴上?

Python 如何将10种不同于1e-5的格式的功率放在轴上?,python,matplotlib,Python,Matplotlib,如果我们使用科学记数法绘制数据,如您所知,通常会在轴的顶部标注1e{+b}。我想用10^{b}代替1e{+b}的符号。有什么方法可以做到这一点吗?是的,您可以使用matplotlib.ticker.FuncFormatter,尝试以下方法: import matplotlib.pyplot as plt import matplotlib.ticker as mtick import numpy as np fig = plt.figure() ax = fig.add_subplot(11

如果我们使用科学记数法绘制数据,如您所知,通常会在轴的顶部标注
1e{+b}
。我想用
10^{b}
代替
1e{+b}
的符号。有什么方法可以做到这一点吗?

是的,您可以使用
matplotlib.ticker.FuncFormatter
,尝试以下方法:

import matplotlib.pyplot as plt 
import matplotlib.ticker as mtick
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)
xs = np.logspace(1,10,10)

ax.plot(xs,range(10))
ax.set_xscale('log')

#the next line is generally wrong, it works just as an example
#ax.xaxis.set_major_formatter(mtick.FuncFormatter(lambda value,pos: ("$10^{%d}$" % pos) ))

#this way change the ticks formats
#import math
#ax.xaxis.set_major_formatter(mtick.FuncFormatter(lambda v,_: ("$10^{%d}$" % math.log(v,10)) ))

#maybe this is what you want
ax.xaxis.set_major_formatter(mtick.ScalarFormatter(useMathText=True))

plt.show()

上面的示例将呈现为latex,但如果您希望显示“^”符号,只需在函数上使用
“10^{%d}”%pos

还有一种方法可以做到这一点,而无需定义lambda(1.4中会有一个新样式格式字符串的版本)@tcaswell Yes,但是使用
FormatStrFormatter
我得到了勾号的值,不是吗?我用这个位置作为一个更简单的例子(我不需要做任何计算),这个
FormatStrFormatter($10^{%d}$”
将不起作用(至少在我的matplotlib[1.2.1]版本上是这样)。是的,你的回答是正确的。只有当您可以将所需内容转换为格式字符串时,格式字符串格式化程序才有用。现在我仔细阅读了你的答案,这是非常错误的。您不应该信任
pos
值,而应该执行
10^{%d}”%log(val))
。如果用户更改视图限制,则刻度将不会更改。(它不会让我收回+1…)是的,我知道这作为一般解决方案是错误的,但我只想展示一个简单的示例(这就是为什么我用长名称命名参数,不仅仅是
v,p
),首先我用值键入数学计算,最后我用
pos
发布示例。我将更新我的答案。请看:这里他们很好地放置了科学符号,但格式是1e{}样式。我只想将其更改为10^{}样式。