我想用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
您需要的是将y刻度设置为对数而不是线性:
plt.yscale('log')
相关问题 更多 >
编程相关推荐