防止科学记数法
- 2024-11-27 10:43:00
- admin 原创
- 166
问题描述:
我有以下代码:
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()
绘制如下图所示:
我如何避免在这里使用科学计数法?ticklabel_format 坏了吗?无法解决实际删除偏移量的问题。
plt.plot(np.arange(1e6, 3 * 1e7, 1e6))
plt.ticklabel_format(useOffset=False)
解决方案 1:
就您而言,您实际上是想禁用偏移量。使用科学计数法与以偏移量值显示事物是不同的设置。
但是,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()
如果您想禁用偏移量和科学计数法,您可以使用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()
x 轴将有一个偏移(注意+
符号),y 轴将使用科学计数法(作为乘数——没有加号)。
我们可以分别禁用其中之一。最方便的方法是ax.ticklabel_format
方法 (或plt.ticklabel_format
)。
例如,如果我们调用:
ax.ticklabel_format(style='plain')
我们将禁用 y 轴上的科学计数法:
如果我们调用
ax.ticklabel_format(useOffset=False)
我们将禁用 x 轴上的偏移,但保持 y 轴的科学计数法不变:
最后,我们可以通过以下方式禁用它们:
ax.ticklabel_format(useOffset=False, style='plain')
解决方案 2:
防止使用科学计数法的另一种方法是使用参数“扩大”不使用科学计数法的区间scilimits=
。
plt.plot(np.arange(1e6, 3 * 1e7, 1e6))
plt.ticklabel_format(scilimits=(-5, 8))
此处,如果轴限值小于 10^-5 或大于 10^8,则在轴上使用科学计数法。
默认情况下,小于 10^-5 或大于 10^6的数字使用科学计数法,因此如果刻度的最高值在此区间内,则不使用科学计数法。
因此,
plt.plot(np.arange(50), np.logspace(0, 6));
plt.ylim((0, 1000000))
有科学计数法,因为 1000000=10^6,但由
plt.plot(np.arange(50), np.logspace(0, 6));
plt.ylim((0, 999999));
不是,因为 y 限制 (999999) 小于默认限制 10^6。
scilimits=
可以使用的参数更改此默认限制ticklabel_format()
;只需传递以下格式的元组:(low, high)
其中刻度的上限应在间隔内(10^low, 10^high)
。例如,在下面的代码(一个极端的例子)中,刻度显示为完整数字,因为np.logspace(0,100)[-1] < 10**101
为 True。
plt.plot(np.logspace(0, 8), np.logspace(0, 100));
plt.ticklabel_format(scilimits=(0, 101))
解决方案 3:
您可以通过以下方式为所有图表全局禁用此功能:
# Disable scientific notation on axes
# by setting the threshold exponent very high
matplotlib.rcParams["axes.formatter.limits"] = (-99, 99)