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^{}样式。