27

我对轴的刻度标签的格式有疑问。我禁用了 y_axis 的偏移量:

ax1.ticklabel_format(style = 'sci', useOffset=False)

并试图把它变成一种科学的格式,但我得到的只是:

0.00355872

但我期待的是:

3.55872...E-2

或类似的。

我真正想要的是:

3.55872... (on the tick label)
x 10^2  (or something similar - on the axis label)

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

另一种方法是将 y_axis 偏移量作为标签,但我也不知道如何执行此操作。

4

2 回答 2

35

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

ax1.ticklabel_format(axis='y', style='sci', scilimits=(-2,2))

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

于 2013-10-04T07:47:35.393 回答
25

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

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

ax1.xaxis.get_major_formatter().set_powerlimits((0, 1))

ScalerFormatter这设置了切换到科学记数法的权力

或者,您可以使用 a 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))

FuncFormatter (doc)采用 2 参数函数,该函数返回一个字符串并使用该函数来格式化标签。(请注意,这也会改变数值在交互式图形角落的显示方式)。第二个参数是“位置”,它是格式化程序制作标签时传递的参数。你可以放心地忽略它,但你必须接受它(否则你会因为错误数量的参数而出错)。这是所有格式化程序的统一 API 并使用格式化程序以交互方式显示鼠标位置的结果。

于 2013-02-08T15:05:51.163 回答