绘制对数轴

我想用matplotlib绘制一个只有一个对数轴的图。

我一直在看文档,但不懂语法。我知道它可能是像plot参数中的'scale=linear'这样简单的东西,但我似乎不能得到正确的答案

示例程序:

import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)


line, = ax.plot(a, color='blue', lw=2)
pylab.show()
1158179 次浏览

你只需要使用semilogy而不是plot:

from pylab import *
import matplotlib.pyplot  as pyplot
a = [ pow(10,i) for i in range(10) ]
fig = pyplot.figure()
ax = fig.add_subplot(2,1,1)


line, = ax.semilogy(a, color='blue', lw=2)
show()

您可以使用Axes.set_yscale方法。这允许您在创建Axes对象之后更改比例。这还允许您构建一个控件,让用户在需要时选择比例。

要添加的相关行是:

ax.set_yscale('log')

您可以使用'linear'切换回线性比例。下面是你的代码:

import pylab
import matplotlib.pyplot as plt
a = [pow(10, i) for i in range(10)]
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1)


line, = ax.plot(a, color='blue', lw=2)


ax.set_yscale('log')


pylab.show()

result chart

首先,混合使用pylabpyplot代码不是很整洁。此外,Pyplot风格优于使用pylab

下面是稍微清理过的代码,只使用了pyplot函数:

from matplotlib import pyplot


a = [ pow(10,i) for i in range(10) ]


pyplot.subplot(2,1,1)
pyplot.plot(a, color='blue', lw=2)
pyplot.yscale('log')
pyplot.show()

相关的函数是pyplot.yscale()。如果您使用面向对象的版本,请将其替换为方法Axes.set_yscale()。记住,你也可以改变X轴的比例,使用pyplot.xscale()(或Axes.set_xscale())。

请检查我的问题“log”和“symlog”有什么区别?,以查看matplotlib提供的一些图缩放示例。

我知道这有点离题,因为一些评论提到ax.set_yscale('log')是“最好的”解决方案,我认为应该进行反驳。我不建议在柱状图和条形图中使用ax.set_yscale('log')。在我的版本(0.99.1.1)中,我遇到了一些渲染问题-不确定这个问题有多普遍。但是bar和hist都有可选参数来设置y刻度为log,这很好。

< p >引用: # EYZ0 < / p >

< a href = " http://matplotlib.org/api/pyplot_api.html matplotlib.pyplot.hist " > http://matplotlib.org/api/pyplot_api.html matplotlib.pyplot.hist < / >

因此,如果您只是使用简单的API,就像我经常使用的那样(我在ipython中经常使用它),那么这很简单

yscale('log')
plot(...)

希望这对寻找简单答案的人有所帮助!:)。

如果你想改变对数的底数,只需加上:

plt.yscale('log',base=2)

在Matplotlib 3.3之前,您必须使用basex/basey作为日志的基