设置大间隔的yaxis值

2024-05-15 10:10:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用y轴上的值1.0e+10, 1.0e+11, 1.0e+12, .. , 1.0e+19来显示我的数据。因此,我尝试通过执行以下操作来指定y轴值:

import matplotlib.pyplot as plt
import matplotlib.ticker as mtick


data = [1e+10, 1e+15, 1e+13, 4e+10, 3e+12, 6e+11,
        7e+14, 8e+13, 9e+12, 10e+16, 11e+17, 12e+18, 13e+19]
axes = plt.axes()
plt.plot(range(1, 14), data)

bottom = 1e+10
top = 1e+19

plt.xticks(np.arange(1, 14, 1))
plt.yticks([1.0e+10, 1.0e+11, 1.0e+12, 1.0e+13, 1.0e+14,
            1.0e+15, 1.0e+16, 1.0e+17, 1.0e+18, 1.0e+19])

axes.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))

plt.show()

结果并不像预期的那样。 output1

之后,我尝试通过指定底部值和顶部值来限制y轴值,以便y轴值介于这些值之间。代码是:

import matplotlib.pyplot as plt
import matplotlib.ticker as mtick

data = [1e+10, 1e+15, 1e+13, 4e+10, 3e+12, 6e+11,
        7e+14, 8e+13, 9e+12, 10e+16, 11e+17, 12e+18, 13e+19]
axes = plt.axes()
plt.plot(range(1, 14), data)

bottom = 1e+10
top = 1e+19

plt.ylim(bottom, top)
plt.xticks(np.arange(1, 14, 1))
axes.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))

plt.show()

output2

我得到的是1.0e+19作为最上面的值,但是最小的(最下面的)值不是1e+10,即使我通过说plt.ylim(bottom, top)来限制y轴。因此,所有的数据都不能可视化。从output2图像的右下角可以看到,光标的y坐标是5.4e+15,是不是应该是0


Tags: 数据importdataplotmatplotlibtopasrange