matplotlib 在某些数据集上生成奇怪的 y 轴?

Jac*_*ead 6 python numpy matplotlib python-2.7

我正在编写一个 python 2.7 脚本,它在循环中生成多个 matplotlib 图。

import matplotlib.pyplot as plt
import numpy as np
Run Code Online (Sandbox Code Playgroud)

在这里,我缩放数据,所以第一个点是 100

scalefac = 100/float(sdata[0])
for dat in range(len(sdata)):
    sdata[dat] = float(sdata[dat])*scalefac
Run Code Online (Sandbox Code Playgroud)

然后绘制它。

y = sdata
x = np.arange(0, len(sdates))

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
aaa = tuple(sdates)
ax.scatter(x,y)
ax.plot(x,y)
plt.xticks(x,aaa)

plt.xlabel('date of run (mm/dd/yy)')
plt.ylabel('power % of baseline')
plt.title('Power Estimation Over Time')
plt.grid(True)
plt.savefig("dump/graph.%s.png" % str(dirlist[d])) 
plt.close(fig)
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,但仅当 y 数据不太靠近时。例如,当 y 为 [100, 95] 或 [100, 100, 110] 时,y 轴具有正确的单位并且点位于正确的位置。当 y 为 [100,100] 或 [100, 100.5] 时,y 轴的单位为 0.1,数据绘制在 ~.2

如果它经过两次循环,一个是 [100, 95],另一个是 [100, 100.5],则只有 [100, 95] 会被正确绘制。

坏图:

坏图

好图:

好图

有没有搞错?

pat*_*ren 5

如果我理解正确的话,问题是偏移量,例如0.0002 + 9.9998e1,您希望将其绘制为100,对吧?如果是这样,这个答案可能对你有帮助。

如果您认为阅读起来太长,这里有一个快速代码示例。关键是ax.get_yaxis().get_major_formatter().set_useOffset(False),它关闭 y 值的格式。

import matplotlib.pyplot as plt
import numpy as np

x = [0, 1, 2]
y = [100, 100, 100.1]

fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)

#  The bad plot
ax.scatter(x,y)
ax.plot(x,y)

# The good plot
ax2.scatter(x,y)
ax2.plot(x,y)
ax2.get_yaxis().get_major_formatter().set_useOffset(False)

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述