大间隔设置y轴值

时间:2019-07-30 20:14:09

标签: python matplotlib

我想在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吗?

1 个答案:

答案 0 :(得分:0)

您需要将y比例设置为对数而不是线性:plt.yscale('log')