防止matplotlib.pyplot中的科学记数法

Tra*_*man 41 python matplotlib

我一直试图在pyplot中压制科学记数法几个小时了.在尝试多种解决方案但没有成功之后,我想要一些帮助.

plt.plot(range(2003,2012,1),range(200300,201200,100))
# several solutions from other questions have not worked, including
# plt.ticklabel_format(style='sci', axis='x', scilimits=(-1000000,1000000))
# ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.show()
Run Code Online (Sandbox Code Playgroud)

情节

提前致谢.

Joe*_*ton 73

在您的情况下,您实际上想要禁用偏移量.使用科学记数法是一个单独的设置,不会根据偏移值显示事物.

但是,ax.ticklabel_format(useOffset=False)应该有效(尽管你已经把它列为没有的事情之一).

例如:

fig, ax = plt.subplots()
ax.plot(range(2003,2012,1),range(200300,201200,100))
ax.ticklabel_format(useOffset=False)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果你想同时禁用偏移量和科学值,你可以使用ax.ticklabel_format(useOffset=False, style='plain').


"偏移"和"科学记数法"之间的区别

在matplotlib轴格式中,"科学记数法"是指数字显示的乘数,而"偏移"是添加的单独术语.

考虑这个例子:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1000, 1001, 100)
y = np.linspace(1e-9, 1e9, 100)

fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()
Run Code Online (Sandbox Code Playgroud)

x轴将具有偏移(注意+符号),y轴将使用科学记数法(作为乘数 - 无加号).

在此输入图像描述

我们可以单独禁用其中一个.最方便的方法是ax.ticklabel_format方法(或plt.ticklabel_format).

例如,如果我们打电话:

ax.ticklabel_format(style='plain')
Run Code Online (Sandbox Code Playgroud)

我们将在y轴上禁用科学记数法:

在此输入图像描述

如果我们打电话

ax.ticklabel_format(useOffset=False)
Run Code Online (Sandbox Code Playgroud)

我们将禁用x轴上的偏移,但保持y轴科学记数不变:

在此输入图像描述

最后,我们可以通过以下方式禁用

ax.ticklabel_format(useOffset=False, style='plain')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 如果您收到“AttributeError:此方法仅适用于 ScalarFormatter”,则只有一个轴可能是问题(我由于日期/时间轴而遇到此问题。)尝试使用“axis=”y 指定要影响的轴'`。 (24认同)
  • 可爱的答案.在我的例子中,我必须添加的一件事是`ax.ticklabel_format`调用的`axis ='y'`参数,因为我的x轴是相当大的日期而我的y轴是浮点数(它正在尝试抛出错误在日期关闭科学记数法).轴的默认值是'axis ='both'. (7认同)
  • 我可能不明白为什么`style='plain'` 不关闭科学记数法,除非与`useOffset=False` 结合使用。至少在我的情况下,为了摆脱 matplotlib 有点随意的科学记数法选择,两者都是必需的:`subplot.axes.ticklabel_format(style='plain', useOffset=False,axis='both')` (2认同)
  • 这仅适用于分散格式化程序:-( (2认同)