我想在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()
我得到的是1.0e+19
作为最高值,但是最小的(底部)值不是1e+10
,即使我通过说plt.ylim(bottom, top)
来限制y轴。因此,所有数据都无法可视化。从output2图像的右下角可以看到,光标的y坐标为5.4e+15
,不是0
吗?
答案 0 :(得分:0)
您需要将y比例设置为对数而不是线性:plt.yscale('log')
。