matplotlib轴标签格式

jor*_*rto 26 python matplotlib

我遇到了轴的刻度标签格式的问题.我禁用了y_axis的偏移量:

ax1.ticklabel_format(style = 'sci', useOffset=False)
Run Code Online (Sandbox Code Playgroud)

并试图把它作为科学的格式,但我得到的是:

0.00355872
Run Code Online (Sandbox Code Playgroud)

但我期待的是:

3.55872...E-2
Run Code Online (Sandbox Code Playgroud)

或类似的.

我真正想要的是:

3.55872... (on the tick label)
x 10^2  (or something similar - on the axis label)
Run Code Online (Sandbox Code Playgroud)

我可以尝试将标签设置为静态,但最后我将有几十或几百个具有不同值的图,因此需要动态设置.

另一种方法是将y_axis偏移量作为标签,但我也不知道如何做到这一点.

Ado*_*obe 35

您还应指定轴和阈值限制:

ax1.ticklabel_format(axis='y', style='sci', scilimits=(-2,2))
Run Code Online (Sandbox Code Playgroud)

当数字超出界限时,这将在y轴上使用sci格式[0.01, 99].


tac*_*ell 24

有很多方法可以做到这一点

你可以调整功率限制(doc)

ax1.xaxis.get_major_formatter().set_powerlimits((0, 1))
Run Code Online (Sandbox Code Playgroud)

它设定了ScalerFormatter切换到科学记数法的权力

或者,您可以使用一个FuncFormatter可以控制很多的东西(但是你可以放松一下).

from matplotlib import ticker

scale_pow = 2
def my_formatter_fun(x, p):
    return "%.2f" % (x * (10 ** scale_pow))
ax1.get_xaxis().set_major_formatter(ticker.FuncFormatter(my_formatter_fun))
ax1.set_xlabel('my label ' + '$10^{{{0:d}}}$'.format(scale_pow))
Run Code Online (Sandbox Code Playgroud)

FuncFormatter (doc)采用2参数函数,该函数返回一个字符串并使用该函数格式化标签.(请注意,这也将改变交互式图形角落中值的显示方式).第二个参数是'position',它是格式化程序生成标签时的参数.你可以安全地忽略它,但你必须接受它(否则你会从错误数量的参数中得到错误).这是所有格式化程序的统一API的结果,并使用格式化程序在交互式中显示鼠标的位置.