在python中用matplotlib绘制对数坐标轴

我想用matplotlib绘制一个对数坐标轴的graphics。

我一直在阅读文档,但无法弄清楚语法。 我知道这可能是一些简单的东西,比如情节论证中的“scale = linear”,但是我似乎无法做到

示例程序:

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.plot(a, color='blue', lw=2) show() 

您可以使用Axes.set_yscale方法。 这使您可以在创buildAxes对象后更改比例。 这也可以让你build立一个控制,让用户select规模,如果你需要的话。

要添加的相关行是:

 ax.set_yscale('log') 

您可以使用“线性”切换回线性刻度。 以下是您的代码的样子:

 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.plot(a, color='blue', lw=2) ax.set_yscale('log') show() 

首先,混合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()replace它。 请记住,您也可以使用pyplot.xscale() (或Axes.set_xscale() )更改X轴的比例。

检查我的问题'log'和'symlog'有什么区别? 看看matplotlib提供的graphics比例的一些例子。

你只需要使用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() 

我知道这是有点偏离主题,因为一些评论提到ax.set_yscale('log')是“最好”的解决scheme,我认为可能是反驳。 我不build议使用ax.set_yscale('log')来处理直方图和条形图。 在我的版本(0.99.1.1)我遇到了一些渲染问题 – 不知道这个问题是多么普遍。 但是,bar和hist都有可选的参数来设置y-scalelogging,这很好。

引用: http : //matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist

所以,如果你只是简单地使用不复杂的API,就像我经常使用(我在ipython中使用它很多),那么这只是简单的

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

希望这有助于寻找一个简单的答案的人! :)。